2016-05-30 23 views
1

<br/>または&,<などが含まれている文字列スティングに問題があります。PHP MySQLは適切に格納する方法/エスケープ文字列

私はDB

nl2br(htmlentities($string, ENT_QUOTES, 'UTF-8')); 

にそれらを保存する前に、私はしかし、私は格納された結果を表示したときに、私はこの

&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&lt;br /&gt;<br /><br /> 

ようなものを取得し、いくつかの回は、誰かが私を示し/助けることができる。このようにそれをエスケープしています文字列をエスケープするのに最も良い方法ですが、ブレークポイントを保持するなど、画面に戻したいときに使います。あなた

+1

PHPには、文字列除外機能とフラグ設定タイプがあります。それは本当にあなたが保管しているものに依存します。
のものだけを保管しているなら、HTMLエンティティと文字列の消毒をお勧めします。 XSSの保護とフィルタリングに関しては、フレームワークまたはライブラリを使用することをお勧めします。何年もの間、私はHTML/XMLを保存するときにコードイグナイターXSS_cleanクラスを使用します。参考:http://php.net/manual/en/filter.filters.sanitize.php –

答えて

1

そうでない場合は、すでにエンコードされた文字列が&amp;amp;&amp;を回し、再びエンコードされます、あなたはfalsedouble_encodeを設定して確認してください。 html_entity_decodeを使用して表示すると、まだエンコードされているかのように表示されます。

望ましくない結果:http://ideone.com/uQxuAM


htmlentities($string, ENT_QUOTES, 'UTF-8', false);を使用すると、これは起こりませんようになります。

次に、html_entity_decode($string, ENT_QUOTES, 'UTF-8');を使用して値を表示します。

デモ:http://ideone.com/8Jo7YA


しかし、MySQLはデータベース内の復号値を記憶する十分可能です。

htmlentitiesでエンコードされた文字列をデータベースに保存することは決してありません。 CSVやPDFを生成したり、電子メールを送信したり、HTML以外のものを作成したい場合はどうなりますか?

実際には、データをエンコードするプログラミングを二重に実行し、データベースのデータ量を増やし、さらに出力をデコードする必要があるという事実を除けば、なぜオンラインで記事をオンラインにしていけないのですか?

結果として出力結果をhtmlで表示するために、値をエンコードする必要があります。

代わりにあなたが実際にデータベースに追加されたものを表示するには、成功メッセージとして出力をフォーマットする次に、準備された文

$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)"); 
$stmt->bind_param("s", $string); 
$stmt->execute(); 

を使用し、まだmysqli_real_escape_string

$string = '<a href="/path/to/file?a=b&foo=bar#baz">My Link</a>'; 
$sql = "INSERT INTO links (link)" 
    . "VALUES(" . mysqli_real_escape_string($string) . "')"; 

以上を使用して入力をエスケープする必要があります。

$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>"; 

は今のブラウザでレンダリングされたHTMLを持っているhtml_entity_decodeを使用する必要はありません。

+0

ありがとう私は今日これを試してみます私の問題に深い説明と解決策を提供するように私はあなたの答えを受け入れました。 – IamCavic

1

html_entity_decode()がこれを行う可能性があります

感謝。元

$string = '<a href="http://test.com>test</a><br/>test'; 
$encode = nl2br(htmlentities($string, ENT_QUOTES, 'UTF-8')); 

echo html_entity_decode($encode, ENT_QUOTES, 'UTF-8'); 

出力$string

<a href="http://test.com>test</a><br/>test 

https://3v4l.org/qS5au

+0

私を助けるために時間を割いていただきありがとうございます。 +1しかし私はより詳細な説明を私に提供するように私は他の答えを受け入れた。 – IamCavic

関連する問題