PHPのaddslashes関数とaddcslashes関数の違いと詳細
3270 ワード
一、addslashesは反スラッシュを使用して文字列を参照する
1.引数は1つのみで、エスケープする文字列
2.エスケープできる文字は、一重引用符(')、二重引用符(")、反斜線()、NUL(null文字)です.
3.例
4.その反転関数は次のとおりです.
stripslashes-参照文字列を逆参照
ps:phpは5.3以前にマジックリファレンスを使用することができ、phpのセキュリティメカニズムであり、効果はaddslashesに等しい.
しかし、移植性が低下し、パフォーマンスが低下し、すべてのデータがエスケープされる必要はなく、エスケープが戻ってくる必要があるため、一般的にはオンになりません.
magic_quotes_gpcはHTTPリクエストデータ(GET、POST、COOKIE)に影響します.実行時に変更することはできません.PHPではデフォルト値はonです.get_magic_quotes_gpc()を参照してください.magic_quotes_runtimeを開くと、外部ソースからデータを取得して返される関数の大部分が、データベースやテキストファイルからのデータを含めて、返されるデータは逆斜線でエスケープされます.このオプションは、PHPのデフォルト値がoffである場合に実行時に変更できます.set_magic_quotes_runtime()およびget_magic_quotes_runtime()を参照してください.magic_quotes_sybaseを開くと、逆斜線ではなく一重引用符で一重引用符がエスケープされます.このオプションはmagic_quotes_gpcを完全に上書きします.両方のオプションを同時に開くと、一重引用符は'にエスケープされます.二重引用符、逆斜線、NULL文字はエスケープされません.
異なるバージョンの互換性を実現するために、
コードに処理コードを付ける必要がある
これですべてのマジックリファレンスが復元されます.
データがデータベースを使用する前にaddslashesエスケープ文字列を使用できる場合は、文字符号化に関連付けられたmysql専用関数mysqli_real_escape_stringを使用することをお勧めします.
二、addcslashes—C言語スタイルで反斜線エスケープ文字列の文字を使用する
1.パラメータは2つあり、1番目のパラメータはエスケープされる文字列、2番目のパラメータはエスケープされる文字リストである
2.その反転関数は次のとおりです.
stripcslashes-addcslashes()を使用してエスケープされた文字列を逆参照します.
3.例
しゅつりょく
エスケープするパラメータを自分で選択できます.A..zは大文字と小文字を表します.
タブのように、変換子のアルファベットが変換され、反転義が戻ってこない場合は、他のアルファベットにも影響を与えることに注意してください.
結果
1.引数は1つのみで、エスケープする文字列
2.エスケープできる文字は、一重引用符(')、二重引用符(")、反斜線()、NUL(null文字)です.
3.例
echo $string = addslashes('aaa"a\dd"aa"'), PHP_EOL; // : aaa\"a\\dd\"aa\"
4.その反転関数は次のとおりです.
stripslashes-参照文字列を逆参照
echo stripslashes($string), PHP_EOL; // : aaa"a\dd"aa"
ps:phpは5.3以前にマジックリファレンスを使用することができ、phpのセキュリティメカニズムであり、効果はaddslashesに等しい.
しかし、移植性が低下し、パフォーマンスが低下し、すべてのデータがエスケープされる必要はなく、エスケープが戻ってくる必要があるため、一般的にはオンになりません.
magic_quotes_gpcはHTTPリクエストデータ(GET、POST、COOKIE)に影響します.実行時に変更することはできません.PHPではデフォルト値はonです.get_magic_quotes_gpc()を参照してください.magic_quotes_runtimeを開くと、外部ソースからデータを取得して返される関数の大部分が、データベースやテキストファイルからのデータを含めて、返されるデータは逆斜線でエスケープされます.このオプションは、PHPのデフォルト値がoffである場合に実行時に変更できます.set_magic_quotes_runtime()およびget_magic_quotes_runtime()を参照してください.magic_quotes_sybaseを開くと、逆斜線ではなく一重引用符で一重引用符がエスケープされます.このオプションはmagic_quotes_gpcを完全に上書きします.両方のオプションを同時に開くと、一重引用符は'にエスケープされます.二重引用符、逆斜線、NULL文字はエスケープされません.
異なるバージョンの互換性を実現するために、
コードに処理コードを付ける必要がある
/**
*
*/
function cleanQuotes() {
//TODO : , , ,
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
if (isset($_GET)) $_GET = _stripSlashes($_GET);
if (isset($_POST)) $_POST = _stripSlashes($_POST);
if (isset($_REQUEST)) $_REQUEST = _stripSlashes($_REQUEST);
if (isset($_COOKIE)) $_COOKIE = _stripSlashes($_COOKIE);
}
if (function_exists('get_magic_quotes_runtime') && get_magic_quotes_runtime()) {
set_magic_quotes_runtime(false);
}
// if (ini_get('magic_quotes_runtime') != 0) { //
// ini_set('magic_quotes_runtime', 0);
// }
if (ini_get('magic_quotes_sybase') != 0) {
ini_set('magic_quotes_sybase', 0);
}
}
/**
* stripslashes
* @param array|string $data
* @return array|string
*/
function _stripSlashes($data) {
return is_array($data) ? array_map('_stripSlashes', $data) : stripslashes($data);
}
cleanQuotes(); //
これですべてのマジックリファレンスが復元されます.
データがデータベースを使用する前にaddslashesエスケープ文字列を使用できる場合は、文字符号化に関連付けられたmysql専用関数mysqli_real_escape_stringを使用することをお勧めします.
二、addcslashes—C言語スタイルで反斜線エスケープ文字列の文字を使用する
1.パラメータは2つあり、1番目のパラメータはエスケープされる文字列、2番目のパラメータはエスケープされる文字リストである
2.その反転関数は次のとおりです.
stripcslashes-addcslashes()を使用してエスケープされた文字列を逆参照します.
3.例
$str = 'ch[ \'"]';
echo $str, PHP_EOL;
echo $string = addcslashes($str, 'A..z][ \'"'), PHP_EOL;
echo stripcslashes($string), PHP_EOL;
しゅつりょく
ch[ '"]
\c\h\[\ \'\"\]
ch[ '"]
エスケープするパラメータを自分で選択できます.A..zは大文字と小文字を表します.
タブのように、変換子のアルファベットが変換され、反転義が戻ってこない場合は、他のアルファベットにも影響を与えることに注意してください.
$str = 'chtr[ \'"]at';
echo $str, PHP_EOL;
echo $string = addcslashes($str, 'A..z][ \'"'), PHP_EOL;
echo stripcslashes($string), PHP_EOL;
結果
chtr[ '"]at
\c\h\t\r\[\ \'\"\]\a\t
[ '"]