PHP のスティッキーフォームの値内の二重引用符をエスケープする
-
07-07-2019 - |
質問
値に二重引用符が含まれている場合、フォーム送信時に入力された内容を記憶するスティッキー フォームを作成するのに少し苦労しています。問題は、HTML が次のようになっているはずであることです。
<input type="text" name="something" value="Whatever value you entered" />
ただし、次のようなフレーズの場合:「どうすればいいですか?」引用符で入力されますが、結果のHTMLは次のようになります。
<input type="text" this?="" do="" i="" how="" value="" name="something"/>
二重引用符をフィルタリングするにはどうすればよいでしょうか?魔法の引用符をオンまたはオフにして試したり、ストリップスラッシュやアッドスラッシュを使用したりしましたが、これまでのところ適切な解決策に出会っていません。PHP でこの問題を回避する最善の方法は何でしょうか?
解決
htmlentities()が必要です。
<input type="text" value="<?php echo htmlentities($myValue); ?>">
他のヒント
上記は、htmlエンティティコードを持つすべての種類の文字をエンコードします。使用したい:
htmlspecialchars($myValue, ENT_QUOTES, 'utf-8');
これはエンコードのみ:
'&' (ampersand) becomes '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
'<' (less than) becomes '<'
'>' (greater than) becomes '>'
$ myValueでstrip_tagsを実行して、htmlタグとphpタグを削除することもできます。
これが私が使っているものです:
htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, 'UTF-8')
ENT_QUOTES
PHP に一重引用符と二重引用符の両方を変換するように指示します。これは望ましいことだと思います。ENT_SUBSTITUTE
そしてENT_DISALLOWED
無効な Unicode を処理します。これらは非常に似ています。私が理解する限り、最初のものは無効なコードユニットシーケンスを置き換えます。 無効にエンコードされた文字または文字を表さないシーケンス, 2 番目の関数は、指定されたドキュメント タイプの無効なコード ポイントを置き換えます。 指定された文書タイプでは使用できない文字です (明示的に指定されていない場合はデフォルト)。の ドキュメンテーション 望ましくないほど簡潔です。ENT_HTML5
私が使用しているドキュメントの種類です。別のものを使用することもできますが、ページの doctype と一致する必要があります。UTF-8
私のドキュメントのエンコーディングです。PHP 5.4.0 を使用していることが確実でない限り、特に英語以外のテキストを扱う場合には、エンコーディングを明示的に指定することをお勧めします。私がいくつかの作業を行っているホストは 5.2.something を使用しており、デフォルトではISO-8859-1
そしてちんぷんかんぷんを生み出します。
として スマート 示唆する、 htmlspecialchars
予約された HTML 文字のみをエンコードしますが、 htmlentities
HTML 表現を持つすべてのものを変換します。ほとんどの状況では、どちらでも機能します。 ここ というテーマに関するディスカッションです。
もう一つ:マジック クオートは誤ったセキュリティ感を与え、5.3.0 で非推奨となり、5.4.0 から削除されるため、マジック クオートを無効にしておくことがベスト プラクティスです。有効にすると、ポストバック時にフィールド内の各引用符の前にバックスラッシュが追加されます (複数のポストバックではさらにスラッシュが追加されます)。OPで設定を変更できることがわかりましたが、将来の参考のために:共有ホスト上にいる場合、またはアクセス権がない場合 php.ini
, 、最も簡単な方法は追加することです
php_flag magic_quotes_gpc Off
に .htaccess
ファイル。