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一起工作。