我有这个链接:http://www.example.com?p=عنوانمقالاخبار
我想编码url而不会损坏它所以我需要urlencoding arabic part form url => “عنوانمقالاخبار”并非所有网址
示例:
url将在编码后变为
http://www.example.com?p=%D8%B9%D9%86%D9%88%D8%A7%D9%86%20%D9%85%D9%82%D8%A7%D9%84%20%D8%A7%D8%AE%D8%A8%D8%A7%D8%B1
不是
http%3A%2F%2Fwww.example.com%3Fp%3D%D8%B9%D9%86%D9%88%D8%A7%D9%86%20%D9%85%D9%82%D8%A7%D9%84%20%D8%A7%D8%AE%D8%A8%D8%A7%D8%B1
提示:我从我这边建立的RSS中得到了这样的链接。
另外,我不想分割网址并编码阿拉伯语部分然后再次加入。我想要所有预期网址的一般解决方案,例如www.example.com/عربي/ 123 www.example.com/123/عربي/عربي
答案 0 :(得分:1)
试试这个:
$url = 'http://www.example.com?p=عنوان مقال اخبار';
$foo = preg_replace_callback(
'/([\x{0600}-\x{06ff}]|[\x{0750}-\x{077f}]|[\x{fb50}-\x{fc3f}]|[\x{fe70}-\x{fefc}])+/Uui'
,(function($match) { return urlencode($match[1]); })
,$url
);
echo $foo;
答案 1 :(得分:1)
/
。urlencode
。这将确保您生成有效的网址。
但是,如果您不关心验证,可以使用以下内容:
function EncodeExistingURL($input) {
//From: https://en.wikipedia.org/wiki/Percent-encoding#Types_of_URI_characters
//The percent sign is included to leave existing encoded characters intact.
$valid = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~!*\'();:@&=+$,/?#[]%';
$length = strlen($input);
for ($i = 0; $i < $length; $i++) {
$character = $input[$i];
$output .= (strpos($valid, $character) === FALSE ? rawurlencode($character) : $character);
}
return $output;
}