ホームページ  >  記事  >  バックエンド開発  >  PHP エスケープはどのように実装されますか?

PHP エスケープはどのように実装されますか?

PHPz
PHPzオリジナル
2023-04-05 14:34:46439ブラウズ

エスケープとは、プログラム内の特殊文字をマシンが認識できる形式に変換することを指します。 PHP にもこのようなエスケープは存在します。 PHP エスケープは、文字の前にバックスラッシュ「\」を追加することで実行されます。たとえば、二重引用符 (") をエスケープするには、次のように記述できます:

echo "She said \"Hello\"";

これは画面に出力されます: 彼女は「こんにちは」と言った。

PHP では、エスケープ文字が必要です。エスケープする必要がある一般的な文字とそのエスケープ文字を次に示します:

#エスケープする必要がある文字エスケープ文字一重引用符\'二重引用符\ "バックスラッシュ\改行\n中字戻り文字 #\r水平タブ文字 #\t
失敗エスケープすると、構文エラーまたはプログラム エラーが発生します。

データベースを使用する場合はエスケープも必要です。エスケープしないと、ユーザーがデータベースに悪意のあるコードを挿入し、システムが攻撃される可能性があります。 PHP には、エスケープ用の 2 つの関数、mysqli_real_escape_string() とaddslashes() が用意されています。

mysqli_real_escape_string() 関数は、PHP が提供する MySQL エスケープ関数であり、互換性が高く、複数の文字セットをサポートしています。 addslashes() 関数は PHP の組み込み関数であり、エスケープ文字は固定されており、文字セット ISO-8859-1 の文字列のみをサポートします。

以下は、mysqli_real_escape_string() 関数の使用例です:

$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

$name = mysqli_real_escape_string($mysqli, $_POST['name']);
$email = mysqli_real_escape_string($mysqli, $_POST['email']);
$message = mysqli_real_escape_string($mysqli, $_POST['message']);

$query = "INSERT INTO messages (name, email, message) VALUES ('$name', '$email', '$message')";

$result = $mysqli->query($query);

if ($result === TRUE) {
    echo "Message sent successfully";
} else {
    echo "Error: " . $mysqli->error;
}

$mysqli->close();
上の例では、mysqli_real_escape_string() 関数を使用して、ユーザーが入力した名前、電子メール、およびメッセージをエスケープします。 SQL インジェクション攻撃を回避するため。

MySQL に加えて、他のデータベースもエスケープする必要があります。データベースごとにエスケープ方法が異なるため、特定の状況に応じて適切なエスケープ関数を選択する必要があります。

要約すると、エスケープは安全な PHP プログラムを作成する上で重要な部分であり、慎重に使用する必要があります。文字を出力するとき、またはデータベースにデータを挿入するときはエスケープが必要です。エスケープ文字の欠落を避けるために、エスケープには mysqli_real_escape_string() 関数を使用することをお勧めします。

以上がPHP エスケープはどのように実装されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。