\u00ed
「 」から「í
」などのUnicodeエスケープシーケンスや他のすべての同様のオカレンスをデコードできる関数はPHPにありますか?
ここで同様の質問を見つけましたが、機能していないようです。
これを試して:
$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);
print_r(json_decode('{"t":"\u00ed"}')); // -> stdClass Object ( [t] => í )
これは、未加工の 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);