PDOでは自動的にエスケープしてくれるところはいいところですが、それでもPDO以外でエスケープする場合は存在します。そんな中でPHPの文字列のエスケープについて考えていきます。10月7日記事

目次





メタ文字やシングルクオーテーション、ダブルクオーテーションをPHPで扱うためには円マークを先頭につける

正規表現や特定の文字を取り除いたりする場合には記号の前に円マークをつけて、その文字を文字としての認識をプログラムにさせる必要があります。円マークを使いたい場合は\\や、"を扱いたい場合は\"としたりとか色々です。(ブラウザによってはバックスラッシュになってる場合がありますので、バックスラッシュを円マークに置き換えて読んでください。)

文字列を意図的にエスケープ

エスケープするための関数addcslashes()、addslashes()、quotemeta()関数を使っていきます。 色々とエスケープしていきます。

コード

index.php

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>文字列エスケープ</title>
</head>
<body>
<p>addcslashes()、addslashes()、quotemeta()の関数を利用</p>
<form action="confirm.php" method="post">
	<label for="str_title">文字入力</label>
    <input type="text" name="str">
    <label for="pattern_title">パターン</label>
    <input type="text" name="pattern">
    <input type="submit" name="submit" value="送信">
</form>
</body>
</html>

confirm.php

<?php
$str = $_POST["str"];
$pattern = $_POST["pattern"];

echo 'quotemeta()・・・メタ文字11種類をエスケープ「^」「(」「)」「$」「+」「*」「?」「[」「]」「.」「\」<br>';
echo quotemeta($str)."<br><br>";

echo 'addslashes()・・・文字列の「\」「NULL」「"」「\'」をエスケープ<br>';
echo addslashes($str)."<br><br>";

echo 'addcslashes()・・・自分で任意の文字をエスケープ ..を二つ使用することで範囲も指定できる。ローマ字全部の場合A..zなど<br>';
echo addcslashes($str,$pattern)."<br><br>";

?>



実行

文字:ABCDEZ^*!"#$%&'()|
パターン:A..C

を入力

quotemeta()・・・メタ文字11種類をエスケープ「^」「(」「)」「$」「+」「*」「?」「[」「]」「.」「\」
ABCDEZ\^\*!"#\$%&'\(\)|

addslashes()・・・文字列の「\」「NULL」「"」「'」をエスケープ
ABCDEZ^*!\"#$%&\'()|

addcslashes()・・・自分で任意の文字をエスケープ ..を二つ使用することで範囲も指定できる。ローマ字全部の場合A..zなど
\A\B\CDEZ^*!"#$%&'()|



A..Cとやると、AからCまでの文字をエスケープしてくれます。

以上

最終更新:2015年10月08日 21:51