この記事では主にPHPで入力エスケープ文字を処理するコードを紹介しますので、必要な方は参考にしてください
まずはWordPress 3.6で導入されたばかりの関数を見てみましょう
magic_quotes_gpc オプションの値が On の場合、PHP パーサーは、post、get、cookie からのデータにエスケープ文字「」を自動的に追加し、これらのデータがプログラム内の特殊文字によって引き起こされる致命的な問題を引き起こさないようにします。特にデータベースステートメントの間違い。
addslashes() 関数は、指定された事前定義文字の前にバックスラッシュを追加します
しかし、get_magic_quotes_gpc() は PHP5.4 以降ではキャンセルされます。関数では、将来のエラーを回避するために、すべての入力は次のようにフィルターされます:
/** * Add slashes to a string or array of strings. * * This should be used when preparing data for core API that expects slashed data. * This should not be used to escape data going directly into an SQL query. * * @since 3.6.0 * * @param string|array $value String or array of strings to slash. * @return string|array Slashed $value */ function wp_slash( $value ) { if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { if ( is_array( $v ) ) { $value[$k] = wp_slash( $v ); } else { $value[$k] = addslashes( $v ); } } } else { $value = addslashes( $value ); } return $value; }
mysql および GET および POST データを処理する場合、多くの場合、データの引用符をエスケープする必要があります。 PHP の設定では、' (一重引用符)、" (二重引用符)、(バックスラッシュ)、および NULL 文字を自動的に変換できます。
magic_quotes_gpc
HTTP リクエスト データ (GET、POST、COOKIE) に影響します。実行時に変更することはできません。 PHP のデフォルト値は on です。
echo $_GET['id']; # これはオンになっており、書き込みには影響しません。たとえば、上記の $_GET['id'] がデータベースに書き込まれるとき、それは依然として abc'de"f,
逆に、magic_quotes_gpc=Off; の場合、文字には引用符が必要です。 (一重引用符でも二重引用符でも)、直接 mysql に書き込むと空白になります
しかし、mysql ではなくドキュメントに書き込むと、abc'de"f
magic_quotes_runtime
場合は開かれた場合、そのほとんどはデータベースやテキスト ファイルなどの外部ソースからデータを取得して返す関数は、バックスラッシュでエスケープされたデータを返します。このオプションは実行時に変更でき、PHP のデフォルト値はオフです。
オンにすると、バックスラッシュの代わりに一重引用符を使用して一重引用符がエスケープされます。このオプションは、magic_quotes_gpc を完全にオーバーライドします。両方のオプションを同時にオンにすると、一重引用符は " にエスケープされます。二重引用符、バックスラッシュ、および NULL 文字はエスケープされません。
私のフォームのコンテンツは元々:
対策1:php.iniファイルを変更する(php.iniの変更方法は説明しませんのでググってください)
対策2:Canceledをエスケープする
ステップ 1: $_POST['content'] などの送信したデータを見つけて、それを $content=stripslashes($_POST['content']); に変更します
ステップ 2: 今後は $ を使用して POST[' を置き換えますcontent'] with $content
ステップ 3: データベースに送信します。データベース ストレージは通常のままです:次のようになります
(知っておくべきです)これを解決するにはどうすればよいでしょうか? この話はやめましょう)
ステップ 4: データベースから読み取ったコンテンツをフィルタリングするには、stripslashes() を使用します。
この関数は、addslashes() によって追加されたバックスラッシュを削除します。データベースまたは HTML フォームから取得したデータをクリーンアップするために使用されます
(
PHP ページで次のような状況を望まない場合:
一重引用符は ' としてエスケープされます二重引用符は " としてエスケープされます
それを防ぐために次の設定を行うことができます:php.ini で設定します: magic_quotes_gpc = Off)
概要は次のとおりです:
の場合、
は入力できません。 addslashes() およびtripslashes() 操作のデータベースの文字列データを出力すると、データは正常に表示されます。
この時点で入力データに対してaddslashes()を実行する場合は、出力時にstripslashes()を使用して余分なバックスラッシュを削除する必要があります。
2. magic_quotes_gpc=off の場合
入力データを処理するにはaddslashes()を使用する必要がありますが、出力のフォーマットにはstripslashes()を使用する必要はありません
addslashes()はバックスラッシュを一緒にデータベースに書き込まないため、mysqlが実行を完了するのに役立つだけですSQL ステートメント。
関連する推奨事項:
PHP は引用符の前にバックスラッシュを追加します (PHP はバックスラッシュを削除します)
以上がPHP は入力エスケープ文字を処理するコードを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。