阿拉伯语 urlencoding 不正确

Arabic not urlencoding correctly

我有字符串:

$str = 'ماجد';

这需要编码为:

'%E3%C7%CC%CF'

但我不知道如何获得这个编码字符串。我相信它是 Windows-1256。上面的编码字符串是我的程序对其进行编码的方式。

有谁知道如何到达这个字符串?

如果您知道要使用 Windows-1256,那么您所要做的就是将输入字符串(即 UTF-8)的编码更改为 Windows-1256。然后将 urlencode() 应用于返回的字符串,仅此而已。

有几种方法可以更改 PHP 中字符串的编码。其中之一(我测试并提供了您期望的结果)正在使用 iconv():

$str  = 'ماجد';
$conv = iconv('utf-8', 'windows-1256', $str);
echo(urlencode($conv));

您需要以某种方式将字符串拆分为十六进制表示形式,然后在十六进制数字对前放置一个 % 符号。

<?php

$hexString = bin2hex("ماجد");  
for($i = 0; $i < strlen($hexString); $i += 2){
    echo "%".substr($hexString, $i, 2);
}

?>   

这可以解决问题,但我相信还有更优雅的方法。