在URL中发送阿拉伯字符

4

我有这些阿拉伯语句子:

نايتيد أمامه عشرة أيام فقط لكي يقرر مستقبل برباتوف في النادي

必须将其发送到URL中。 我尝试了以下方法:

$url = 'http://example.com/?q='.urlencode('نايتيد أمامه عشرة أيام فقط لكي يقرر مستقبل برباتوف في النادي');

那种编码的结果是: %D9%86%D8%A7%D9%8A%D8%AA%D9%8A%D8%AF+%D8%A3%D9%85%D8%A7%D9%85%D9%87+%D8%B9%D8%B4%D8%B1%D8%A9+%D8%A3%D9%8A%D8%A7%D9%85+%D9%81%D9%82%D8%B7+%D9%84%D9%83%D9%8A+%D9%8A%D9%82%D8%B1%D8%B1+%D9%85%D8%B3%D8%AA%D9%82%D8%A8%D9%84+%D8%A8%D8%B1%D8%A8%D8%A7%D8%AA%D9%88%D9%81+%D9%81%D9%8A+%D8%A7%D9%84%D9%86%D8%A7%D8%AF%D9%8A
但php脚本在$_GET['q']查询字符串中接收到的是:
نايتيد أمامه عشرة أيام Ùقط لكي يقرر مستقبل برباتو٠ÙÙŠ النادي

这个 PHP 文件是 UTF-8 编码的。有什么想法吗?


可能是什么是正确的URL编码Unicode字符的方法?的重复问题。 - Lightness Races in Orbit
你是如何输出 $_GET['q'] 的值的? - Wooble
你尝试过这个吗:utf8_decode($_GET['q']); - Sudhir Bastakoti
2
如果文件被编码为UTF-8,则编码部分已经完成正确。但是,在读取参数时,您需要将传入字符串的编码转换为UTF-8。可以使用iconvmb_convert_encoding来实现。此外,“默认情况下”应该使用rawurlencode而不是urlencode,除非有具体原因不这样做。 - Jon
你尝试过使用file_put_contents('test', $_GET['q'])并启用utf8编辑器打开它来检查它是否真的不是utf8吗? - piotrekkr
显示剩余2条评论
4个回答

4

您需要对已编码的实体进行URL解码。此外,请记住,UTF8和PHP组合并不是很好。


1
什么?PHP和UTF8不是很搭配吗?你为什么这么说? - hakre

3

如我在其他问题中提到的,您应该对阿拉伯文本进行urlencode处理

urlencode('كلام-عربي')

非常重要的是在页面的head标签中添加字符集编码,否则该链接将无法工作。

<meta charset="utf-8">

1
不要使用urlencode,而是使用rawurlencode。

0

正如我在另一个问题中提到的,您应该对URI中的阿拉伯文本进行urldecode处理。

echo urldecode(explode('?', $_SERVER['REQUEST_URI'], 2));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接