-
- $json_string = json_encode(array(
- 'blog.9696e.com'
- ));
- echo preg_match('/[^,:{}\[\]0-9.- +Eaeflnr-u nrt]/',$json_string) ? 'yes' : 'no';
- ?>
コードをコピー
上記のコードを使用して、json 形式かどうかを検出します。良い。
添付ファイル、phpがjsonを処理する際の中国語の問題の解決策
オブジェクトをjsonに変換すると、中国語属性の1つがnullになってしまいました。
-
- $usr = new User();
- echo json_encode($usr);>
{"プラットフォームID":"123213","ユーザーID":"1023"}
-
中国語では次の 2 つの例外が発生します。
ケース 1、オブジェクト自体の値が中国語である属性が UTF-8 でエンコードされている場合、次の出力が表示されます。
{"プラットフォームID":"123213","ユーザーID":"1023","ユーザー名":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"}
UserName は人間以外の言語で書かれています。firebug を使用して表示すると、中国語になります。
ケース 2、非 utf-8 エンコーディング、出力は null になります。
{"プラットフォームID":"123213","ユーザーID":"1023","ユーザー名":null}
マニュアルを確認したところ、json_encodeはutf-8のみ有効で、他のエンコーディングはnullになってしまうことが分かりました。
エンコード変換の問題を解決するにはどうすればよいですか?次の例を考えてみましょう。
例:
プライベート関数 to_utf8($in) { if (is_array($in)) { foreach ($in as $key => $value) { $out[ $this->to_utf8($key)] = $this->to_utf8($value); - }
- }
- elseif(is_string($in))
- {
- if(mb_detect_encoding($in) != "UTF -8 ")
- Return utf8_encode ($ in);
- Else
- Return $ in;
- }
- Lse {
- Return $ in;
- }
- Return $ OUT;
- & gt;
-
-
- コードをコピー
-
-
- テスト:
1. $usr->UserName を直接出力し、ページヘッダーに文字化けを設定します。
2. echo json_encode($usr) は UserName=null を出力します
3. ページヘッダーが charset=gbk に設定され、出力が正しい -> 元のエンコーディングが gbk であると判断できます
-
- 結論:
1. ページの文字セットがデータベースと一致していること、および出力が正常であることを確認します。
2. json_encode を実行するときは、データ エンコーディングが utf-8 であり、json_decode が通常であることを確認してください。
3. 非 utf-8 文字を json_encode する場合は、まずそれらを utf-8 に変換します。
4. utf-8 以外の文字に対して json_decode を実行する場合は、必ず元のエンコーディングに変換してください。そうしないと、文字化けした文字が出力されます。
-
-
|