javascript や PHP ではシングルクォーテーションを使うのはなぜ?

HTML/CSSphp

クォーテーション、シングルとダブルの違い

HTMLでよく用いられている引用符「ダブルクォーテーション」。<a href=”http://~.html”~>こんな風につかいますよね。

一方、javascript や PHP では シングルクォーテーションが使われることが多いですよね。

どちらで書けばいいのか疑問に感じたことはありませんか?

実はHTMLなら<a href=”http://yaruzou.net”> でも <a href=’http://yaruzou.net’>でも、きちんとリンクとして機能します。

javascriptも同じく、シングルクォーテーション ‘ でもダブルクォーテーション  でも動きます。

ではなぜHTMLは ダブルクォーテーションを使い、javascript のようなスクリプトは  を使うのかというと、便利だからです。

たとえばjavascriptでURLを入れてある”site_url”という変数を使ってHTMLとして表示したい時に、HTMLは ダブルクォーテーションと決めておくと楽なんです。

var site_url='yaruzou.net';
document.getElementById('link').innerHTML ='<a href="'+site_url+'">';

<a href="http://yaruzou.net">//結果

文字列の赤太字の部分は文字列として でくくって、HTML内で使われる は文字列として使っています。

厳密に使い分けなければいけないこともある

javascriptでもphpでも、通常は構造が維持できていればシングルクォーテーション・ダブルクォーテーションどちらでも使えます。

しかしシングルとダブルを使い分けなければいけないケースもあります。

たとえば php なら ‘文字列だよ’ でも “文字列だよ” でも同じく文字列として扱われますが、エスケープシーケンス(特殊文字)だけは挙動が異なります。

phpでの使い分け

phpでは改行記号 \r\n を echo ‘\r\n’; としても改行されません。ダブルクォーテーション echo “\r\n”; ならきちんと改行されます。

echo '\r\n';  //シングルクォーテーションは改行コードにならない
echo "\r\n"; //ダブルクォーテーションなら改行される

なぜ違いが出るかというとシングルクォーテーション 内を文字列として扱うという PHP の仕様のためです。分割するときも同じで、explodeで’\r\n’ を使っても機能しません。

逆にダブルクォーテーションでくくった “\r\n” で \r\n を文字として表示させたければ、\\r\\nのようにエスケープ(特殊文字無効化)する必要があります。

その他、jQueryプラグインなどでもシングルとダブルを区別することもあります。

まとめ

まとめると

  • HTMLではダブルクォーテーション・シングルクォーテーションどちらでもいい
  • javascript や php では基本的にどちらでも使えるが、扱いが異なることがある

ということです。

ダブルとシングルの使い方は人によっても違ったりするので、最初のうちは迷いすよね。