addcslashes
C 言語と同様にスラッシュで文字列をクォートする
説明
string addcslashes(string $string
, string $characters
)
パラメータ
-
string
-
エスケープしたい文字列。
-
characters
-
エスケープの対象となる文字を並べたもの。
characters
が \n
, \r
等の文字を含んでいる場合、
C言語と同様の手法によりエスケープされます。
アスキーコードが32未満または126より大きい文字は、8進表現に変換されます。
characters
引数の文字の列びを定義する際には、
範囲の最初と最後で指定する文字集合に含まれる文字の種類を把握するようにしてください。
例1 範囲指定で addcslashes を使う
<?php
echo addcslashes('foo[ ]', 'A..z');
// 出力: \f\o\o\[ \]
// 全ての大文字と小文字はエスケープされます。
// ... しかし、[\]^_` もエスケープされてしまいます。
?>
また、ある範囲を指定する最初の文字がその範囲の2番目の文字よりも大きな
ASCII 値を有している場合、範囲は定義されません。
最初と最後の文字とピリオド文字のみがエスケープされます。
ある文字の ASCII 値を見つけるには、
ord 関数を使用してください。
例2 誤った文字の順番を addcslashes に指定する
<?php
echo addcslashes("zoo['.']", 'z..A');
// 出力: \zoo['\.']
?>
0, a, b, f, n, r, t そして v といった文字をエスケープするときには注意しましょう。
変換結果はそれぞれ \0, \a, \b, \f, \n, \r, \t そして \v となりますが、
これらはすべて、C 言語では定義済みのエスケープシーケンスです。
その多くは C 言語に由来する他の言語でもエスケープシーケンスとして定義されており、
PHP も例外ではありません。つまり、characters
にこれらの文字を定義した状態で
addcslashes を使って他の言語のコードを生成したときに、
期待通りの結果が得られない可能性があるということです。
例
"\0..\37" のように characters
に範囲を指定可能です。この場合、アスキーコードが 0 から 31
の範囲の文字は全てエスケープされます。
例3 addcslashes の例
<?php
$not_escaped = "PHP isThirty\nYears Old!\tYay to the Elephant!\n";
$escaped = addcslashes($not_escaped, "\0..\37!@\177..\377");
echo $escaped;
?>
参考
- stripcslashes
- stripslashes
- addslashes
- htmlspecialchars
- quotemeta