PHPがjson_encode関数を使用するときに中国語をエスケープしないための解決策、
この記事の例では、PHP で json_encode 関数を使用するときに中国語をエスケープしないための解決策について説明します。参考のためにみんなで共有してください。具体的な方法は以下の通りです
json_encode 関数は、gbk の中国語文字を変換したり、スペースに直接変換したりすることはありません。この記事では、json のエスケープされていない中国語の問題に対処する方法についていくつかのヒントを紹介します。
PHP に付属の json_encode() 関数を呼び出すと、中国語の文字が見つかったときに、その中国語の文字がエスケープされます。例:
コードをコピーします コードは次のとおりです:
echo json_encode(array('Hello'));
// 出力: ["u4f60u597d"]
これは非常に迷惑で、まるで意味不明のことです。JSON 標準では、「すべての UNICODE 文字」をエスケープするようには規定されていません。
このエスケープを無効にする方法は? 答えは、PHP 独自の json_encode() ではこの機能を無効にできないため (バージョン 5.4.0 より前では、JSON_UNESCAPED_UNICODE オプションを追加できます)、新しい JSON ライブラリに変更することしかできません。簡単にするために、json_encode() を実装するために数十行のコードを記述しただけです。
コードをコピーします コードは次のとおりです:
class Util
{
静的関数 json_encode($input){
// PHP 5.4.0 以降、このオプションが追加されました。
If(定義('JSON_UNESCAPED_UNICODE')){
return json_encode($input, JSON_UNESCAPED_UNICODE);
}
if(is_string($input)){
$text = $input;
$text = str_replace('\', '\\', $text);
$text = str_replace(
array("r", "n", "t", """),
array('r', 'n', 't', '\"'),
$text);
return '"' . $text . '"';
}else if(is_array($input) || is_object($input)){
$arr = array();
$is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));
foreach($input as $k=>$v){
If($is_obj){
$arr[] = self::json_encode($k) ':' 。
}その他{
$arr[] = self::json_encode($v);
}
}
If($is_obj){
return '{' . join(',', $arr) '}';
}その他{
return '[' . join(',', $arr) ';
}
}その他{
$input を返します '';
}
}
}
連想配列(is_obj)の判定など、考慮されていない部分については、問題が発生したときに話しましょう。クラスが気に入らない場合は、自分で純粋関数に変換して名前を変更してください。
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/910599.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/910599.html技術記事 PHP が json_encode 関数を使用するときに中国語がエスケープされない場合の解決策 この記事では、PHP が json_encode 関数を使用する場合に中国語がエスケープされない場合の解決策について説明します。参考のためにみんなで共有してください。ツール...