111

\u00ed「 」から「í」などのUnicodeエスケープシーケンスや他のすべての同様のオカレンスをデコードできる関数はPHPにありますか?

ここで同様の質問を見つけましたが、機能していないようです。

4

7 に答える 7

192

これを試して:

$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $str);

UTF-16 ベースの C/C++/Java/Json スタイルの場合:

$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UTF-16BE');
}, $str);
于 2010-05-29T10:06:35.477 に答える
75
print_r(json_decode('{"t":"\u00ed"}')); // -> stdClass Object ( [t] => í )
于 2011-11-02T13:48:55.200 に答える
3

これは、未加工の UNICODE を HTML に置き換える大ハンマー アプローチです。このソリューションを配置する他の場所を見たことはありませんが、他の人がこの問題を抱えていると思います。

他の処理を行う前に、この str_replace 関数をRAW JSONに適用します。

function unicode2html($str){
    $i=65535;
    while($i>0){
        $hex=dechex($i);
        $str=str_replace("\u$hex","&#$i;",$str);
        $i--;
     }
     return $str;
}

これは思ったほど長くはかからず、Unicode を HTML に置き換えます。

もちろん、JSON で返される Unicode 型を知っていれば、これを減らすことができます。

たとえば、私のコードは多くの矢印と dingbat Unicode を取得していました。これらは 8448 から 11263 の間です。したがって、私の製品コードは次のようになります。

$i=11263;
while($i>08448){
    ...etc...

ここでタイプ別に Unicode のブロックを調べることができ ます

これと同じ大ハンマーを単純なエンコーディングに適用できます。

 $str=str_replace("\u$hex",chr($i),$str);
于 2015-03-06T13:41:16.753 に答える