Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【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 * この関数は、主にPHPの旧バージョンで「magic_quotes_gpc」設定により
6 * 自動的に追加されたバックスラッシュ(\'、\"、\\など)を削除するために使われます。
7 * 現在のPHP(8.x)ではmagic_quotes_gpcは廃止されているため、
8 * 主に意図的にエスケープされた文字列からバックスラッシュを取り除く目的で利用されます。
9 */
10function demonstrateStripslashes(): void
11{
12    // バックスラッシュでエスケープされた入力文字列の例
13    $escapedString1 = "It\'s a beautiful day.";
14    $escapedString2 = "He said, \"Hello World!\"";
15    $escapedString3 = "C:\\\\Program Files\\\\MyApp"; // バックスラッシュ自体がエスケープされている場合
16
17    echo "元の文字列1: " . $escapedString1 . "\n";
18    echo "stripslashes適用後1: " . stripslashes($escapedString1) . "\n\n";
19
20    echo "元の文字列2: " . $escapedString2 . "\n";
21    echo "stripslashes適用後2: " . stripslashes($escapedString2) . "\n\n";
22
23    echo "元の文字列3: " . $escapedString3 . "\n";
24    echo "stripslashes適用後3: " . stripslashes($escapedString3) . "\n";
25}
26
27// 関数を実行して動作を確認します
28demonstrateStripslashes();
29
30?>

PHPのstripslashes関数は、文字列内に含まれるバックスラッシュ(\)を取り除くために使われる関数です。主に、エスケープ処理によって意図的に、または自動的に追加されたバックスラッシュを削除し、文字列を元の状態に戻すことを目的としています。

引数string $stringには、バックスラッシュを除去したい文字列を渡します。関数は、この文字列から\'(シングルクォートのエスケープ)、\"(ダブルクォートのエスケープ)、\\\\(バックスラッシュ自体のエスケープ)などのバックスラッシュを削除します。そして、処理後のstring型の文字列を戻り値として返します。例えば、\''に、\""に、\\\\\へと変換されます。

サンプルコードでは、"It\'s a beautiful day.""C:\\\\Program Files\\\\MyApp"といったエスケープされた文字列にstripslashes関数を適用しています。これにより、余分なバックスラッシュが取り除かれ、元の意図した文字列が復元される様子が示されています。

PHP 8の環境では、旧バージョンに存在したmagic_quotes_gpcという設定が廃止されているため、PHPが自動的にバックスラッシュを追加することはありません。しかし、手動でエスケープ処理を行った文字列や、外部システムからの入力データに意図しないバックスラッシュが含まれている場合に、この関数は現在でも有用です。

stripslashes関数は、文字列中のバックスラッシュ(\'\"\\\0)を取り除くために使用されます。PHPの旧バージョンにあったmagic_quotes_gpc設定によって自動的に付加されたバックスラッシュを元に戻す目的で使われることが多かったですが、PHP 8ではこの設定は廃止されています。

現在のPHPでは、主にaddslashes関数などで意図的にエスケープされた文字列を元の状態に戻す場合に利用します。この関数をユーザーからの入力値のセキュリティ対策として直接利用することは不適切です。SQLインジェクションやXSS(クロスサイトスクリプティング)などの脆弱性対策にはなりませんので、入力値の検証や適切なエスケープ処理には、プリペアドステートメントやhtmlspecialcharsといった別の関数を用いる必要があります。不必要な場面での使用はセキュリティリスクを高める可能性もあるため、本当にバックスラッシュの除去が必要な場合にのみ限定して使用してください。

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環境では、ユーザーからの入力データに対して本関数を直接適用することは基本的に推奨されません。安易に適用すると、意図しないデータ破損やセキュリティ上の問題を引き起こす可能性があります。利用を検討するのは、レガシーシステムとの連携や、特定のライブラリが手動でエスケープした文字列を元に戻す必要がある場合に限定してください。不要な適用は避けるべき重要なポイントです。

PHP stripslashesでエスケープを削除する

1<?php
2
3/**
4 * stripslashes() 関数の使用例
5 * magic_quotes_gpc が on の場合に自動的に追加されるバックスラッシュを削除します。
6 * PHP 8 では magic_quotes_gpc は廃止されているため、この関数は通常、
7 * データベースやファイルから読み込まれた、意図せずエスケープされた文字列を
8 * 処理する場合に使用されます。
9 *
10 * システムエンジニアを目指す初心者の方へ:
11 * Webフォームからの入力などで特殊文字(例: シングルクォート、ダブルクォート)が
12 * データベースへの挿入前にエスケープ(バックスラッシュが付加)されることがあります。
13 * 例えば、「It's a test」が「It\'s a test」となる場合です。
14 * stripslashes() は、このような不要なバックスラッシュを取り除くために使われます。
15 */
16
17// 例1: シングルクォートがエスケープされた文字列
18$escapedString1 = "It\\'s a beautiful day.";
19echo "元々の文字列 (シングルクォート): " . $escapedString1 . PHP_EOL;
20$cleanString1 = stripslashes($escapedString1);
21echo "処理後の文字列 (シングルクォート): " . $cleanString1 . PHP_EOL . PHP_EOL;
22
23// 例2: ダブルクォートがエスケープされた文字列
24$escapedString2 = "He said, \\\"Hello, world!\\\"";
25echo "元々の文字列 (ダブルクォート): " . $escapedString2 . PHP_EOL;
26$cleanString2 = stripslashes($escapedString2);
27echo "処理後の文字列 (ダブルクォート): " . $cleanString2 . PHP_EOL . PHP_EOL;
28
29// 例3: バックスラッシュ自体がエスケープされた文字列
30// (例: ファイルパスを文字列として扱う場合など)
31$escapedPath = "C:\\\\Program Files\\\\MyApp";
32echo "元々の文字列 (パス): " . $escapedPath . PHP_EOL;
33$cleanPath = stripslashes($escapedPath);
34echo "処理後の文字列 (パス): " . $cleanPath . PHP_EOL . PHP_EOL;
35
36// 例4: エスケープされていない文字列への適用 (変化なし)
37$plainString = "This is a normal string.";
38echo "元々の文字列 (通常): " . $plainString . PHP_EOL;
39$resultPlain = stripslashes($plainString);
40echo "処理後の文字列 (通常): " . $resultPlain . PHP_EOL;
41
42?>

stripslashes関数は、文字列の中から不要なバックスラッシュ(\)を取り除くために使用されるPHPの標準関数です。

この関数は、主に特殊文字がエスケープ処理された文字列を元の形に戻す目的で利用されます。かつてPHPにはmagic_quotes_gpcという設定があり、Webフォームからの入力データなどに自動的にバックスラッシュが付加されることがありました。stripslashesは、その自動付加されたバックスラッシュを削除するために使われていました。

PHP 8ではmagic_quotes_gpc設定は廃止されていますが、現在でもデータベースやファイルから読み込まれた文字列、または他のシステムから渡された文字列が、意図せずエスケープされている場合に利用されます。例えば、「It's a test」のようにシングルクォートがエスケープされたり、「\"Hello\"」のようにダブルクォートがエスケープされたりしている文字列から、余分なバックスラッシュを除去し、「It's a test」や「"Hello"」といった正しい形式に戻します。

引数にはstring型の処理対象の文字列を指定し、戻り値としてバックスラッシュが除去されたstring型の文字列が返されます。エスケープされていない通常の文字列に適用しても、文字列に変化は生じません。この関数は、データを正しく表示したり処理したりするために、エスケープされた文字列を元の状態に戻す際に役立ちます。

stripslashes関数は、文字列に誤って付加されてしまったバックスラッシュを取り除くために使用します。例えば、データベースから読み込んだデータが意図せず「It's」のようにエスケープされてしまった場合に、「It's」の状態に戻す際に役立ちます。PHP 8では、自動エスケープ機能のmagic_quotes_gpcは廃止されているため、この関数を積極的に使うケースは少なくなりました。重要な注意点として、この関数はSQLインジェクション対策のようなセキュリティ目的で利用するものではありません。入力値の安全性を確保するには、別途適切なエスケープ処理やバリデーションを行う必要があります。また、元々バックスラッシュがない文字列に適用しても変化はありませんが、本当にバックスラッシュの除去が必要な場合のみ利用するようにしてください。

関連コンテンツ

関連プログラミング言語