PHPのダブルクォーテーションのエスケープでエラー回避!簡単解説

PHPで文字列を表す場合は、ダブルクォーテーションなどで囲みます。

しかし、文字列として認識されずにエラーになる場合も発生するでしょう。

そんな困った時に確認をして頂きたいのがエスケープ。

今回はエスケープについて以下の内容でお話します。

【解説】エスケープとは
【実践】ダブルクォーテーションをエスケープしてみよう
【番外】関数でエスケープ

丁寧に解説していきますので是非最後までご覧ください。

エスケープについて

エスケープとはなんでしょうか。

どんな時に必要でしょうか。

例を見ながら考えていきましょう。

ダブルクォーテーションのエスケープ

以下のようなサンプルコードを準備しました。

<?php
echo "<a href="https://www.sejuku.net/">侍エンジニア塾</a>";

ブラウザに「侍エンジニア塾」のリンクを表示させるだけです。

結果は、以下のエラーになります。

Parse error: syntax error, unexpected 'https' (T_STRING), expecting ',' or ';' in ★エラーのファイルパス on line エラーの★行数

このエラーはダブルクォーテーションがダブルクォーテーションに囲まれている事が原因です。

つまり、ダブルクォーテーションで囲まれてもダブルクォーテーションは文字列として認識されません。

文字列として認識させるために行うのがエスケープです。

実際のエスケープ処理は【エスケープを行う】の章で説明します。

ダブルクォーテーション以外のエスケープ

ダブルクォーテーション以外にも、エスケープ処理が必要なものがあります。

・【'】シングルクォーテーション
・【n】改行
・【t】タブ
・【$】ドル
・【】バックスラッシュ

なども、ダブルクォーテーションと同じようにエスケープが必要です。

エスケープの必要性についてご理解いただけたでしょうか。

それでは次章からエスケープの方法を解説していきます。

エスケープを行う

エスケープを行う上で使用するのは、エスケープシーケンスです。

以下のような種類があります。

・【"】ダブルクォーテーション
・【'】シングルクォーテーション
・【n】改行
・【t】タブ
・【$】ドル
・【】バックスラッシュ

このエスケープシーケンスを使用して、前章でエラーになったコードを修正してみましょう。

<?php
echo "<a href="https://www.sejuku.net/">侍エンジニア塾</a>";

ダブルクォーテーションのエスケープシーケンスは【"】です。

ダブルクォーテーションの前に【】をつけてエスケープシーケンスに変更します。

結果
侍エンジニア塾

ブラウザに文字リンクとして表示される事を確認しました。

ダブルクォーテーション以外のエスケープも同じです。

エスケープシーケンスに置き換えることで文字列として認識させることが出来ます。

関数でエスケープ

ダブルクォーテーションのエスケープについてご理解頂けたと思います。

ポイントは「エスケープシーケンスに置き換える」ですね。

ただ、以下の場合が発生した場合はどうでしょうか。

・文字列が長く、全てをエスケープシーケンスに置き換えるのが難しい。
・データベースからのデータ取得のためデータの中身がわからず置き換えられない。

こんな場合は関数を使用しましょう。

エスケープ(addslashes)

文字列をaddslashes関数を使用して、エスケープしてみましょう。
関数の使い方は以下です。

addslashes(★エスケープしたい文字列★);

それでは実際に以下のコードで確認します。

<?php
echo addslashes("samurai's school");
結果
samurai's school

エスケープされていることが確認できました。

※addslashes関数でエスケープ出来るのは、ダブルクォーテーション、バックスラッシュ、シングルクォーテーション、Nullの4種類のみです。

アンエスケープ(stripslashes)

文字列をstripslashes関数を使用して、アンエスケープしてみましょう。

使い方は以下です。

stripslashes(★アンエスケープしたい文字列★);

それでは実際に、addslashes関数でエスケープされた文字列を、アンエスケープで元の文字列に戻します。

<?php
$samurai_test = "samurai's school";
echo addslashes($samurai_test); // ①
echo "<br />"; // ②
echo stripslashes($samurai_test); //③ 

①addslashesでエスケープした結果を出力しています。

②画面を見やすくするため、改行の<br>タグを出力しています。

stripslashesでアンエスケープした結果を出力しています。

結果
samurai's school
samurai's school

stripslashesによって、エスケープ前の値に戻る事がわかりました。

まとめ

本日はPHPのダブルクォーテーションのエスケープについてお話しました。

文字列を扱う時には大事な要素ですので是非整理して覚えてください。

それでは、また。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

つぶらや

つぶらや

独学PG&SE、東京在住30代女性。
誰でもプログラマーになれるがモットーで、わかりやすい記事を目指しています。