【PHP8.x】stripslashes関数の使い方

stripslashes関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

stripslashes関数は、バックスラッシュ(\)によってエスケープされた文字列を元に戻す処理を実行する関数です。この関数は引数として受け取った文字列を走査し、エスケープシーケンスである \'\"\\ を、それぞれ元の文字であるシングルクォート(')、ダブルクォート(")、バックスラッシュ(\)に変換した新しい文字列を返します。例えば、I\'m a programmer. という文字列に対してこの関数を適用すると、I'm a programmer. という結果が得られます。かつてPHPには、外部からの入力データを自動的にエスケープする magic_quotes_gpc という機能があり、この機能で処理されたデータを元に戻すために stripslashes関数が広く使われていました。しかし、この機能はPHPの古いバージョンで廃止されたため、現在の開発において、フォームから受け取った入力データに対して無条件にこの関数を使用する必要性はほとんどありません。データベースに保存するデータのエスケープ処理には、プリペアドステートメントのような、より安全で推奨される方法を使用してください。

構文(syntax)

1<?php
2
3// シングルクォートとバックスラッシュがエスケープされた文字列
4$escaped_string = "I\'m a system engineer. The path is C:\\\\temp.";
5
6// stripslashes() を使ってバックスラッシュを取り除く
7$original_string = stripslashes($escaped_string);
8
9// 処理後の文字列を出力
10echo $original_string;
11
12// 出力結果:
13// I'm a system engineer. The path is C:\temp.
14
15?>

引数(parameters)

string $string

  • string $string: スラッシュ(\)をエスケープ解除する対象の文字列

戻り値(return)

string

バックスラッシュ \ によるエスケープを削除した文字列を返します。

サンプルコード

stripslashesでエスケープを除去する

1<?php
2
3/**
4 * stripslashes() 関数の使用例を示します。
5 * 
6 * PHP 8.1 以降ではこの関数は非推奨 (deprecated) となり、
7 * PHP 9.0 で削除される予定です。
8 * 現代の PHP アプリケーション開発では、通常この関数は不要です。
9 * これは、古い PHP の「マジッククォート」機能(PHP 5.4 で削除済み)によって
10 * 自動的にエスケープされた文字列のバックスラッシュを除去するために設計されました。
11 *
12 * 現在では、意図的に文字列にバックスラッシュが付加された場合や、
13 * 古いシステムのコードと互換性を保つ必要がある場合にのみ使用されます。
14 */
15
16// サンプルとして、バックスラッシュでエスケープされた文字列を用意します。
17// (例: データベースに保存する前や、マジッククォートが有効な環境から受け取った文字列)
18$escapedString = "これは\'シングルクォート\'、\"ダブルクォート\"、そして\\バックスラッシュ\\を含む文字列です。";
19
20echo "元のエスケープされた文字列:\n";
21echo $escapedString . "\n\n";
22
23// stripslashes() を使用して、文字列からバックスラッシュを除去します。
24$unslashedString = stripslashes($escapedString);
25
26echo "stripslashes() 適用後の文字列:\n";
27echo $unslashedString . "\n";
28
29// 注意: この関数はPHP 8.1以降で非推奨となるため、
30// 新しい開発では使用を避け、文字列処理には `htmlspecialchars()` や `filter_var()` など、
31// 文脈に応じた適切な関数を使用することを推奨します。
32
33?>

PHPのstripslashes関数は、文字列内に含まれるバックスラッシュ(\)を取り除くために利用されます。具体的には、引数として渡された文字列 $string 内で、シングルクォート(\')、ダブルクォート(\")、およびバックスラッシュそのもの(\\)の前に付加されたエスケープ用のバックスラッシュを除去し、元の文字列表現に戻した結果の文字列を返します。

この関数は、かつてPHPに存在した「マジッククォート」という自動エスケープ機能が有効な環境で、データベースなどから取得したデータに含まれる余分なバックスラッシュを取り除く目的で使用されていました。しかし、マジッククォート機能はPHP 5.4で廃止されたため、現代のPHPアプリケーション開発では通常、この関数は必要ありません。

PHP 8.1以降ではstripslashes関数は非推奨(deprecated)となり、PHP 9.0での削除が予定されています。したがって、新たに開発を行うシステムにおいては、この関数の使用は避けるべきです。文字列処理には、文脈に応じて、HTML出力時のエスケープにはhtmlspecialchars()関数を、ユーザー入力の検証にはfilter_var()関数を用いるなど、より適切なセキュリティやデータ処理の関数を利用することが推奨されます。

サンプルコードでは、意図的にバックスラッシュでエスケープされた文字列を用意し、stripslashes()関数を適用することで、エスケープ用のバックスラッシュが効果的に除去され、本来の文字列が復元される過程を示しています。これにより、この関数の基本的な挙動が確認できます。

stripslashes() 関数は、PHP 8.1以降で非推奨(deprecated)となり、PHP 9.0で削除が予定されています。この関数は、古いPHPの自動エスケープ機能である「マジッククォート」(PHP 5.4で削除済み)によって付加されたバックスラッシュを除去するために設計されました。

現代のPHPアプリケーション開発では、通常この関数は不要であり、新しいコードでの使用は避けてください。文字列を安全に扱うには、HTML出力にはhtmlspecialchars()、入力値の検証にはfilter_var()など、目的に合った適切な関数を利用することを強く推奨します。古いシステムとの互換性が必要な場合など、特殊な状況でのみ検討するようにしてください。

PHP stripslashesの動作確認

1<?php
2
3/**
4 * stripslashes関数の基本的な使い方を示すサンプルコード。
5 *
6 * この関数は、クォートされた文字列(シングルクォート、ダブルクォート、バックスラッシュ)の前に
7 * 自動的に追加されたバックスラッシュを取り除きます。
8 * これは主に、古いPHPバージョンの magic_quotes_gpc 機能によってエスケープされた入力データや、
9 * データベースなどに保存される際に手動でエスケープされた文字列を元の状態に戻すために使用されます。
10 *
11 * PHP 8 環境では magic_quotes_gpc は廃止されているため、
12 * 通常、ユーザー入力データに対して直接 stripslashes を適用する必要はありません。
13 * ただし、レガシーシステムとの連携や、特定のライブラリが手動でエスケープしたデータを処理する際に有用です。
14 */
15function demonstrateStripslashes(): void
16{
17    // 例1: シングルクォートがエスケープされた文字列
18    $escapedString1 = "これは\\'エスケープされた\\'文字列です。";
19    echo "--- 例1: シングルクォートのエスケープ ---" . PHP_EOL;
20    echo "元の文字列:           " . $escapedString1 . PHP_EOL;
21    echo "stripslashes適用後: " . stripslashes($escapedString1) . PHP_EOL . PHP_EOL;
22
23    // 例2: ダブルクォートがエスケープされた文字列
24    $escapedString2 = "これは\\\"二重引用符\\\"のエスケープです。";
25    echo "--- 例2: ダブルクォートのエスケープ ---" . PHP_EOL;
26    echo "元の文字列:           " . $escapedString2 . PHP_EOL;
27    echo "stripslashes適用後: " . stripslashes($escapedString2) . PHP_EOL . PHP_EOL;
28
29    // 例3: バックスラッシュ自体がエスケープされた文字列
30    // パスなど、バックスラッシュを文字として扱う際に二重にエスケープされることがあります。
31    $escapedString3 = "パスは C:\\\\Windows\\\\System32 です。";
32    echo "--- 例3: バックスラッシュ自体のエスケープ ---" . PHP_EOL;
33    echo "元の文字列:           " . $escapedString3 . PHP_EOL;
34    echo "stripslashes適用後: " . stripslashes($escapedString3) . PHP_EOL . PHP_EOL;
35
36    // 例4: エスケープされていない文字列に適用した場合
37    // stripslashesは不要なバックスラッシュを追加しないため、影響はありません。
38    $nonEscapedString = "これはエスケープされていない文字列です。";
39    echo "--- 例4: エスケープされていない文字列 ---" . PHP_EOL;
40    echo "元の文字列:           " . $nonEscapedString . PHP_EOL;
41    echo "stripslashes適用後: " . stripslashes($nonEscapedString) . PHP_EOL . PHP_EOL;
42}
43
44// 関数を実行して結果を表示
45demonstrateStripslashes();
46

PHPのstripslashes関数は、文字列からクォート(シングルクォート、ダブルクォート、バックスラッシュ)の前に自動的に追加されたバックスラッシュ(\)を取り除くために使用されます。この関数は、引数として処理したい文字列(string $string)を受け取り、バックスラッシュが除去された新しい文字列(string)を返します。

主に、古いPHPバージョンで自動的に有効になっていたmagic_quotes_gpc機能によってエスケープされた入力データや、データベース保存時などに手動で二重にエスケープされた文字列を元の状態に戻す際に利用されてきました。

PHP 8環境ではmagic_quotes_gpc機能は廃止されているため、通常、ユーザーから直接受け取った入力データに対してstripslashesを適用する必要はありません。これは、入力データが自動的にエスケープされていないため、関数を適用しても期待する変更がない場合が多く、「stripslashes not working」と感じる原因となることがあります。

しかし、レガシーシステムとの連携や、特定のライブラリやフレームワークが手動でエスケープ処理を行ったデータを処理する場合には、この関数が有用です。サンプルコードでは、\'(シングルクォートのエスケープ)、\"(ダブルクォートのエスケープ)、\\\\(バックスラッシュ自体のエスケープ)がそれぞれどのように元の文字に戻されるかを示しています。また、もともとエスケープされていない文字列に適用しても、追加のバックスラッシュが誤って除去されることはなく、文字列に変化がないことも確認できます。この関数は、適用する前に文字列が適切にエスケープされているかを理解しておくことが重要です。

stripslashes関数は、シングルクォートやダブルクォート、バックスラッシュの前に付いたエスケープ用のバックスラッシュを取り除くために使われます。しかし、PHP 8では、古いバージョンで自動的にエスケープを行っていたmagic_quotes_gpc機能は廃止されています。そのため、現在のPHP環境では、ユーザーからの入力データに対して本関数を直接適用することは基本的に推奨されません。安易に適用すると、意図しないデータ破損やセキュリティ上の問題を引き起こす可能性があります。利用を検討するのは、レガシーシステムとの連携や、特定のライブラリが手動でエスケープした文字列を元に戻す必要がある場合に限定してください。不要な適用は避けるべき重要なポイントです。

関連コンテンツ