如果url中有特殊字符符号,可能会导致url不能被正确识别。
我们可以在传递参数前将url编码来解决这个问题。不过需要注意的是,有些字符在url中有独特的作用的(例如#表示锚点位置,&表示连接多个参数),所以JavaScript的encodeURI函数(意思是编码url)是不能编码这些有单独意义的字符的的。需要把它们也转码的话需要用encodeURIComponent函数(意思是编码url组件)。
下面直接列出一下有特殊含义的字符及其编码后的结果:
+ URL 中+号表示空格 %2B
空格 URL中的空格可以用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3
% 指定特殊字符 %25
# 表示书签 %23
& URL 中指定的参数间的分隔符 %26
= URL 中指定参数的值 %3D
url参数中特殊字符的转义处理
function http_status($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_exec($ch); $status = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $status; }
可以用这个函数来获取url请求的状态码,判断404很方便→_→
不过如果测试p站图片url的话,还得加上refer信息来绕过防盗链。
一个下载器搞得我找了好多php的东西,心好累。
php获取url的状态码
在上一篇文章《IP签名档生成器》中,手动添加签名用到了url转码,就是把一般的文本转换为可以作为url来使用的编码,现在我找到了两个转码工具。
第一个方法是在百度搜索"url编码",打开搜索结果中第一个应用。
在上方输入需要转码的内容,然后选择utf-8转码即可。
第二个方法是使用开源中国提供的转码工具,其实比起度娘我还是倾向于用这个。