ホームページ  >  記事  >  バックエンド開発  >  php定期的にJSON形式かどうかを検出する方法についての議論

php定期的にJSON形式かどうかを検出する方法についての議論

WBOY
WBOYオリジナル
2016-07-25 08:57:321040ブラウズ
  1. $json_string = json_encode(array(
  2. 'blog.9696e.com'
  3. ));
  4. echo preg_match('/[^,:{}\[\]0-9.- +Eaeflnr-u nrt]/',$json_string) ? 'yes' : 'no';
  5. ?>
コードをコピー

上記のコードを使用して、json 形式かどうかを検出します。良い。

添付ファイル、phpがjsonを処理する際の中国語の問題の解決策

オブジェクトをjsonに変換すると、中国語属性の1つがnullになってしまいました。

  1. $usr = new User();
  2. 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);
  1. }
  2. }
  3. elseif(is_string($in))
  4. {
  5. if(mb_detect_encoding($in) != "UTF -8 ")
  6. Return utf8_encode ($ in);
  7. Else
  8. Return $ in;
  9. }
  10. Lse {
  11. Return $ in;
  12. }
  13. Return $ OUT;
  14. & gt;
  15. コードをコピー
  16. テスト: 1. $usr->UserName を直接出力し、ページヘッダーに文字化けを設定します。 2. echo json_encode($usr) は UserName=null を出力します 3. ページヘッダーが charset=gbk に設定され、出力が正しい -> 元のエンコーディングが gbk であると判断できます
  17. 結論: 1. ページの文字セットがデータベースと一致していること、および出力が正常であることを確認します。 2. json_encode を実行するときは、データ エンコーディングが utf-8 であり、json_decode が通常であることを確認してください。 3. 非 utf-8 文字を json_encode する場合は、まずそれらを utf-8 に変換します。 4. utf-8 以外の文字に対して json_decode を実行する場合は、必ず元のエンコーディングに変換してください。そうしないと、文字化けした文字が出力されます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。