正しい理解方法
PHPにはデフォルトで「マジッククォート」スイッチがあり、このスイッチがオンになっていると、外部から転送された$_GET、$_GET、$COOKIEがPHPによってエスケープされます。例:
string(3) "1'"
これは、PHP の実行中に閉じることができないため、3 つの方法があります。 、ini_set() は使用できません。
magic_quotes_sybase = Off
2. システムを変更できない場合は、.htaccess
PHP_flag magic_quotes_gpc を使用できます。 Off
3. 最も効率の悪いPHPエスケープ方法
<ol class="dp-xml"> <li class="alt"><span><span>if (get_magic_quotes_gpc()) { </span></span></li> <li><span>function stripslashes_deep($value) </span></li> <li class="alt"><span>{ </span></li> <li> <span>$</span><span class="attribute">value</span><span> = </span><span class="attribute-value">is_array</span><span>($value) ? </span> </li> <li class="alt"><span>array_map('stripslashes_deep', $value) : </span></li> <li><span>stripslashes($value); </span></li> <li class="alt"><span>return $value; </span></li> <li><span>} </span></li> <li class="alt"> <span>$</span><span class="attribute">_POST</span><span> = </span><span class="attribute-value">array_map</span><span>('stripslashes_deep', $_POST); </span> </li> <li> <span>$</span><span class="attribute">_GET</span><span> = </span><span class="attribute-value">array_map</span><span>('stripslashes_deep', $_GET); </span> </li> <li class="alt"> <span>$</span><span class="attribute">_COOKIE</span><span> = </span><span class="attribute-value">array_map</span><span>('stripslashes_deep', $_COOKIE); </span> </li> <li><span>} </span></li> <li class="alt"> <span class="tag">?></span><span> </span> </li> </ol>
SQL文中にLIKEがある場合の%の処理については、addslashesは%_をエスケープしませんし、これらの2文字はエスケープしません。他の SQL ステートメントではエスケープする必要があるため、LIKE ステートメントがある場合にのみ使用される関数 like_esc( $value) をコンパイルしました。
Web ページへの出力には、最初にストリップスラッシュを使用し、次に htmlspecialchars を使用してエスケープします。
これで、すべての転送に適用される、比較的怠惰な PHP エスケープ メソッドができました。すべてエスケープされました。<ol class="dp-xml"> <li class="alt"><span><span>if (!get_magic_quotes_gpc()) { </span></span></li> <li><span>function addslashes_deep($value) </span></li> <li class="alt"><span>{ </span></li> <li> <span>$</span><span class="attribute">value</span><span> = </span><span class="attribute-value">is_array</span><span>($value) ? array_map('addslashes_deep', $value) : addslashes($value); </span> </li> <li class="alt"><span>return $value; </span></li> <li><span>} </span></li> <li class="alt"> <span>$</span><span class="attribute">_POST</span><span> = </span><span class="attribute-value">array_map</span><span>('addslashes_deep', $_POST); </span> </li> <li> <span>$</span><span class="attribute">_GET</span><span> = </span><span class="attribute-value">array_map</span><span>('addslashes_deep', $_GET); </span> </li> <li class="alt"> <span>$</span><span class="attribute">_COOKIE</span><span> = </span><span class="attribute-value">array_map</span><span>('addslashes_deep', $_COOKIE); </span> </li> <li><span>} </span></li> </ol>