阿拉伯语 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);
}
?>
这可以解决问题,但我相信还有更优雅的方法。
我有字符串:
$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);
}
?>
这可以解决问题,但我相信还有更优雅的方法。