php iconv函数在linux主机上不起作用
请查看以下代码:php iconv函数在linux主机上不起作用,php,linux,unicode,utf-8,iconv,Php,Linux,Unicode,Utf 8,Iconv,请查看以下代码: <?php function unicode_decode($str){ return preg_replace("/\\\u([0-9A-F]{4})/ie", "iconv('utf-16', 'utf-8',hex2str(\"$1\"))", $str); } function hex2str($hex) { $r = ''; for ($i = 0; $i < strlen($hex
<?php
function unicode_decode($str){
return preg_replace("/\\\u([0-9A-F]{4})/ie", "iconv('utf-16', 'utf-8',hex2str(\"$1\"))", $str);
}
function hex2str($hex) {
$r = '';
for ($i = 0; $i < strlen($hex) - 1; $i += 2)
$r .= chr(hexdec($hex[$i] . $hex[$i + 1]));
return $r;
}
$var="\u092e\u0941\u0930\u0932\u0940 \u0938\u093e\u0930";
$var = unicode_decode($var);
echo $var;
?>
此代码在windows主机中运行良好,输出为“मुरली सार". 然而,在linux中,它的输出是随机的,显示为“像汉字一样”⸉䄉〉㈉䀉 㠉㸉似乎linux主机与php的inconv函数不兼容
如何在linux托管中解决这个问题?
提前感谢。UTF-16有两种变体:大端和小端。它们在代码单位的字节顺序上有所不同:字符U+1234在大端将被编码为
'\x12\x34'
,但在小端将被编码为'\x34\x12'
看起来iconv在不同的系统上采用了不同的版本。通过使用utf-16be
,可以在所有系统上使用big-endian版本:
return preg_replace("/\\\u([0-9A-F]{4})/ie", "iconv('utf-16be', 'utf-8',hex2str(\"$1\"))", $str);
您可能想尝试
mb\u convert\u编码
我相信echo json\u decode(“$var\”);
可以代替所有的代码。谢谢它与json\u decode()一起工作,但我需要它在return preg\u replace(“/\\\u([0-9A-F]{4})/ie”,“iconv('utf-16',utf-8',hex2str(\“$1\”),$str上工作);行,因为它过滤不需要的英文、括号和逗号characters@all我有这样的字符串:[[[“\u0905\u092A\u092E\u093E\u0928\u093F\u0924\u0915\u0930\u0928\u093E”,“abase”,“Apam\u0101nita karan\u0101”,“u0101”],[[“动词”,[“\u0905\u092A\u092E\u093E\u0928\u093F\u0924\u0915\u0930\u0928\u093E”],[]\u0905\u092A\u092E\u093E\u0928\u093F\u0924\u0915\u0930\u0928\u093E“,[“贬低”、“贬低”、“屈辱”、“羞辱”、“贬低”、“侮辱”、“低调”]、“贬低”、“侮辱”、“贬低”、“贬低”、“因此我需要让它与iconv一起工作。