为什么FILTER_VALIDATE_URL不适用于波斯字符?

时间:2018-05-13 10:43:39

标签: php url

以下是my code

$url = "http://localhost/myweb/qanda/1/";
var_dump(filter_var($url, FILTER_VALIDATE_URL));
//=> string(31) "http://localhost/myweb/qanda/1/"

它被称为有效的URL,一切都很好。但是there is a Persian character in the URL

时,我的代码无效
$url = "http://localhost/myweb/qanda/1/س";
var_dump(filter_var($url, FILTER_VALIDATE_URL));
//=> bool(false)

为什么呢?我该如何解决?

1 个答案:

答案 0 :(得分:3)

好吧,主要是因为根据RFC输入的字符串不是有效的网址:

  

“只有字母数字[0-9a-zA-Z],特殊字符”$ -_。+!*'(),“[不包括引号 - ed]和用于保留目的的保留字符可能在URL“

中使用未编码的

您的客户(浏览器)会将您的角色转换为有效的%D8%B3并将其发送到服务器,但您的客户可能仍然会显示س(我的)。

基本上,正确的URL将被验证如下:

$url = "http://localhost/myweb/qanda/1/%D8%B3";
var_dump(filter_var($url, FILTER_VALIDATE_URL));

您可以安全地使用urlencode()翻译外国字符。