2011-07-20 5 views
4

です。これは私が頻繁に遭遇するものですが、通常はtryとtry againメソッドデータが機能するまで私は、データを維持し、jsonを台無しにしないために、SOがベストプラクティスを知っていると考えました。jsからphp、php、mysql、REST jsonレスポンスにデータを送る際に必要な正しいエンコーディング/エスケープ/ htmlentitiesは

のは、私が送信したいデータがテキスト最も厄介な種類のデータであると仮定しよう - 特殊文字、&、<、 "、\ nは、\ n個の\ rを、\ tの、+など

ましょうまた、私はutf8ですべてを保持すると仮定し、私のmysqlテーブルはutf8に設定されていますが、PHPのutf8サポートが不足しているので、これを考慮する必要があります。

私は何をエンコーディング/

1)クライアントJSからAJAX POST経由でPHPにJSONデータを送信する(GETの場合は何でもよい)

2)PHPでデータをデコードし、テキスト文字列をmysqlデータベースに格納します(またはエスケープされた/エンコードされたデータを格納しますか? )

3)PHPでMySQLのDBからデータを取得し、あなたのPHPにJSONデータを送信するため、当社のREST API

答えて

5

私はphp/mysql/jqueryを使用してデータを前後に渡すたびに、エンコード/エスケープの次の組み合わせを使用してしまいます。

1)あなたはURLを送信していない限り、これは何もする必要はありません(私はこれがGETリクエストのためだと思います)。しかし、URLを送信する場合は、encodeURIComponent(url)これは適切に&のURLと特殊文字をエスケープします(詳細はhereを参照)。 mysqliのとバインドされたパラメータを使用し、それはすべてあなたのためのエスケープを行います

2)(それについてhereを読む)

3)は、HTMLファイルにデータをエコーするとき、私はいつもこれを使用する:

<?php 
    htmlspecialchars($string_to_escape, ENT_QUOTES, 'UTF-8', false); 
?> 

これは、すべての特殊文字を正しくエンコードします(falseは "no double encoding"です)。また、HTMLページの上部に適切なUTF-8メタタグがあることを確認してください。

4)json_encodeを使用すると、データを正しくエスケープする必要がありますが、#3のコードを使用して確認します。しかし、特殊文字を含むデータを返しているのであれば、おそらくそれを必要とします。

+0

ヒントをお寄せいただきありがとうございます。 json_encode/phpのデコードは常に動作するように見えるので、問題に遭遇する主な問題は、ajax経由でデータを前後に送信することです。私はencodeURIComponentで実験します。 –

+0

encodeURIComponentは、URL文字列の一部としてURLを送信する場合にのみ必要です。それ以外の場合、他のデータはjqueryで適切にエンコードする必要があります。 –

0
  1. からのJSON応答のJS AJAX要求

    4)にJSONレスポンスとして返します特別なことを行う必要はありません。 JSONはシリアライズされたjavascript '変数'です

  2. 準備文を使用してください! 3.
として
  • 同じ(そのための組み込みPHP関数があるかどうかはわからない)/ /ストリップをデコード
  • は、JSONのデータを逃れるために、適切な関数を使用するPHPで内容を変更しようとしないでください
  • 関連する問題