ホームページ  >  記事  >  php教程  >  PHPの一重引用符と二重引用符の違い

PHPの一重引用符と二重引用符の違い

WBOY
WBOYオリジナル
2016-06-13 12:20:431299ブラウズ

1. 文字列を定義する

PHP では、文字列の定義に一重引用符または二重引用符を使用できます。ただし、文字列を定義するには同じ一重引用符または二重引用符を使用する必要があります。たとえば、「He​​llo」と「Hello」は無効な文字列定義です。
文字列を定義する場合、区切り文字として考慮される引用符は一重引用符または二重引用符の 1 種類だけです。したがって、文字列が二重引用符で始まる場合は、二重引用符のみがパーサーによって解析されます。このようにして、二重引用符で囲まれた文字列内に他の文字 (一重引用符も含む) を含めることができます。次の引用符文字列は有効です:
Php コード

コピー コード コードは次のとおりです:


$s = " 私は二重引用符文字列の中の「単一引用符文字列」です";
$s = '私は一重引用符文字列の中の「二重引用符文字列」です';一重引用符文字列' 二重引用符文字列の中にあります";
$s = '私は一重引用符文字列の中の「二重引用符文字列」です';

「これ」が機能しないのはなぜですか?」は3つのセクションに分かれています。この文字列で二重引用符を表現したい場合は、エスケープ文字「" (バックスラッシュ) を使用して、「なぜ "this" は機能しないのですか?」 のようにすることができます。


2. 文字列変数内の単一引用符と二重引用符
PHP では、二重引用符文字列に文字列変数を直接含めることができます。文字列処理は同じです。

コードをコピーします コードは次のとおりです:

$full_name = $first_name 。 $full_name = "$first_name $last_name";


一重引用符文字列と二重引用符文字列は、PHP では異なる方法で処理されます。二重引用符で囲まれた文字列の内容は解釈して置換できますが、一重引用符で囲まれた文字列の内容は常に通常の文字とみなされます。例:

Php コード


コードをコピー コードは次のとおりです。

$foo = 2; >echo "foo is $foo"; // 結果を出力します: foo は 2

echo 'foo is $foo'; // 結果を出力します: foo は $foo
echo "foo is $foon";印刷結果: foo は 2 (同時に改行)
echo 'foo is $foon'; // 印刷結果: foo は $foon
$foo = 2;
echo "foo is $; foo"; // 出力結果: foo は 2
echo 'foo is $foo'; // 出力結果: foo は $foo
echo "foo is $foon"; // 出力結果: foo は 2 (改行あり)
echo 'foo is $foon'; // 出力結果: foo is $foon


ご覧のとおり、単一引用符文字列内のバックスラッシュも拡張された意味を失います。 (バックスラッシュ \ の挿入と一重引用符 ' の挿入を除く)。したがって、変数置換を実行し、文字列に n (改行) などのエスケープ シーケンスを含める場合は、二重引用符を使用する必要があります。一重引用符文字列は他のどこでも使用できます。スクリプト内で一重引用符文字列を使用すると、処理速度が速くなります。これは、PHP パーサーが一重引用符文字列を比較的単純な方法で処理する一方で、二重引用符の処理も内部で解析する必要があるためです。したがって、文字列はより複雑になり、処理が若干遅くなります。
文字列内の変数の複雑な組み合わせを参照する場合、いくつかの問題が発生する可能性があります。次のコードは正常に機能します:

Php コード



コードをコピー

echo "value = $foo";

echo "value = $foo"; echo "value = $a[$i]";



次のコードでは、必要な結果を取得できません。
echo "value = $a[$i][$j ]"; //二次元配列 $a の要素を出力したい。
文字列を使用する際のこうした潜在的な問題を回避するには、通常、次のように複雑な変数を文字列から分離します: echo 'value = ' . $a[$i][$j];/ / 文字列を接続するにはドット (.) を使用します。
もう 1 つの方法は、構文アナライザーがそれらを正しく識別できるように、複雑な変数を中かっこで囲むことです。

echo "value = {$a[$i] [$j]}" // の要素を出力します。二次元配列 $a
このようにして、新たな問題が発生します。文字列内で中括弧文字自体を引用したい場合は、エスケープ文字を使用することを忘れないでください:
Php コード



コピー コード

コードは次のとおりです:

$var = 3; echo "value = {$var}" // 結果を出力します "value = 3" echo "value = {$ var}"; // 結果を出力します "value = {3}"

$var = 3;

echo "value = {$var}"; // 結果を出力します "value = 3"
echo " value = {$ var}"; // 結果を出力 "value = {3}"



3. SQL ステートメント内

これは、データベースに挿入される SQL ステートメントで文字列を定義する場合によく発生する問題です。 want 一重引用符を含む文字列をデータベースに挿入すると、この SQL ステートメントでエラーが発生します。
例: $sql="insert into userinfo (username,password) Values('O'Kefee','123456')"
このとき、SQL にエスケープ文字を追加する方法もあります。ステートメント バックスラッシュ,
は:...Values('O'Kefee',...
もちろん、addslashes() 関数を使用することもできます。この関数の機能はエスケープ文字を追加することです。
は: $s =addlashes("O'Kefee") ...Values('".$s."',...
もう 1 つの方法は、php でマジッククォート オプションを設定することです。 ini. このオプションをオンにしてフォームを渡します 送信された情報にシングルクォーテーションが含まれている場合は、エスケープ文字が自動的に追加されるため、他の関数を使用する必要はありません。
追加: ダブルクォーテーションの機能から始めましょう。および一重引用符: フィールドはコンパイラーによって解釈され、HTML コードとして出力されますが、一重引用符内のフィールドは解釈される必要がなく、直接出力されます。例:

コードをコピーします コードは次のとおりです:

$abc='I love u';
echo $abc //結果は次のようになります。 love u
echo '$abc' //結果は次のとおりです:$ abc
echo "$abc" //結果は次のとおりです: 私はあなたを愛しています

したがって、値を割り当てるときは、データベース内の SQL ステートメントでは、二重引用符 SQL="select a, b,c from ..." でも使用する必要があります。ただし、SQL ステートメントではフィールド名を引用するために単一引用符が使用されます
例: select * from table where user='abc';
ここでの SQL ステートメントは SQL=" select * from table where user='abc'"
ただし、次のような場合:

コードをコピーします コードは次のとおりです:

$user='abc';
SQL1="select * from table where user=' ".$user." ' "; Compare
SQL2="select * from table where user=' abc ' "


一重引用符と二重引用符の間にもう少しスペースを追加しました。より明確に見ていただけると幸いです。
つまり、「abc」を「.$user.」にすべて一重引用符で囲んで置き換えます。 SQL 文字列全体を分割するだけです。 SQL1 は次の 3 つの部分に分解できます。
1: "select * from table where user=' "
2: $user
3: " ' "
を使用して文字列を接続します。理解できますよ。

1. 引用符は文字列を定義します

PHP では、通常、文字列は次のように 2 つの引用符で定義されます。
'I am a string in一重引用符の
「私は二重引用符で囲まれた文字列です」
PHP パーサーは、文字列を判断するために引用符のペアを使用します。したがって、すべての文字列で同じ一重または二重引用符
を使用して開始と終了を定義する必要があります。たとえば、次の文字列定義は不正です:
「一致しない引用符があるため、私は有効な文字列ではありません。
'私もダメです!
文字列を定義する場合、使用できる引用符は 1 種類のみです。 used 区切り文字、つまり一重引用符または二重引用符として扱われます。したがって、文字列が二重引用符
で始まる場合、二重引用符のみがパーサーによって解析されます。このようにして、二重引用符で囲まれた文字列内に他の文字 (一重引用符
記号も含む) を含めることができます。次の引用符文字列は有効です:
$s = "私は二重引用符文字列内の「単一引用符文字列」です";
$s = '私は単一引用符文字列内の「二重引用符文字列」です' ;
PHP は、文字列の先頭に対応する引用符を見つけると、文字列の終わりに達したと判断します。そのため、
「なぜ "this" は機能しないのですか?
実際には、PHP 構文パーサーは 3 つの部分に分かれています:
「なぜ " - 一重引用符を含む二重引用符の文字列
これ - パーサーが処理できない余分な文字
" は機能しないのですか?」 — — 通常の文字列
上の例では、二重引用符文字列内に二重引用符を含めようとしていますが、パーサーは 2 番目の二重引用符
に遭遇したときに文字列が終了するとみなします。引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその元の意味を無視する必要があります。これは、この引用符が文字列の一部であることを PHP に伝えるために、引用符
の前にバックスラッシュを追加します。正しい表現は次のとおりです:
「なぜ "that" は機能しませんか?
英語の文字列でよくある問題は、一重引用符であるため、英語
(英語) で使用されることです。所有格) は文字列では非常に一般的です。次の文字には注意する必要があります。
'アポストロフィはエスケープしたほうがよい'
バックスラッシュ自体を文字列に含める必要がある場合、文字列内でバックスラッシュ自体が特別な意味を持っていることがわかります。
記号の前に追加のバックスラッシュを追加する必要があります。例:
$file = "c:windowssystem.ini";
echo $file; // 出力結果は次のようになります: c:windowssystem.ini
$file = "c:\windows\system. ini" ;
echo $file; // 出力結果は次のとおりです: c:windowssystem.ini
文字列を定義するもう 1 つの方法。特殊文字の問題を排除し、長いテキストの引用を容易にします。文字列定義メソッド
は、<<< 記号で始まり、その後にカスタム文字列が続き、最後の行はカスタム文字列で終わり、ボックス内にある必要があります。

2. 文字列接続

文字列は、次のように文字列連結文字 (.) を使用して接続できます。 >$last_name = 'Brown';
$full_name = $first_name . ' . $last_name;
一般的な使用法は、HTML 文字列コード (=) とコネクタ (.) の大きなブロックを作成することです。
$html = '

''
$html .= '
for ( $i=0 ; $i<10 ; $i ) {
$square = $i * $i; 🎜>$html .= '
number に短縮して結合できます。 td>square
' .
}
$html .= '
';


3. 文字列内で変数を使用する

この機能により、接続シンボルの使用を回避できます。多数の単純な文字列を接着すること。 PHP では、単語
文字列変数を二重引用符で囲まれた文字列に直接含めることができます。次の 2 つの文字列の処理結果が同じであることがわかります。
$full_name = $first_name . ' ' . $last_name;
$full_name = "$first_name $last_name";
PHP では、単一引用符文字列と二重引用符文字列は別々に処理されます。二重引用符で囲まれた文字列の内容は解釈して置換できますが、一重引用符で囲まれた
文字列の内容は常に通常の文字とみなされます。例:
$foo = 2;
echo "foo is $foo"; // 出力結果: foo は 2
echo 'foo is $foo'; // 出力結果: foo は $foo
echo "foo is $foon"; // 出力結果: foo は 2 (改行あり)
echo 'foo is $foon'; // 出力結果: foo は $foon
はい、単一引用符文字列内のバックスラッシュであっても、その拡張された意味は失われます (バックスラッシュ \ の挿入と単一引用符 ' の挿入を除く)。したがって、変数置換を実行し、文字列に n (改行文字) などのエスケープ シーケンスを含める場合は、二重引用符
を使用する必要があります。一重引用符文字列は他の場所でも使用できます。PHP 構文アナライザーは
一重引用符文字列を比較的単純な方法で処理するのに対し、二重引用符の処理も複雑であるため、スクリプト内で一重引用符文字列を使用すると処理速度が速くなります。文字列内を解析する必要があるため、複雑になり、処理速度が若干遅くなります。
文字列内の変数の複雑な組み合わせを参照する場合、いくつかの問題が発生する可能性があります。
echo "value = $foo";
echo "value = $a[$i ]"; 🎜> 次のコードでは、必要な結果を取得できません:
echo "value = $a[$i][$j]"; //2 次元配列 $a 要素の特定の部分を出力したいとします。
文字列を使用する際のこれらの潜在的な問題を回避するには、通常、次のように複雑な変数を文字列から分離します。
echo 'value = ' 。
別の方法は次のとおりです。複雑な変数は中括弧で囲み、パーサーがそれらを正しく識別できるようにします。
echo "value = {$a[$i][$j]}" // 2 次元配列 $a このようにして、新たな問題が発生します。文字列内で中括弧文字自体を引用したい場合は、エスケープ文字を使用することを忘れないでください。
$var = 3;
echo "value = {$var}"; // 結果を出力します。 "value = 3"
echo "value = {$var}" // 結果を出力します "value = {3}"


3. スラッシュと SQL ステートメント

; HTML コードまたは SQL クエリ ステートメントの生成は、PHP プログラムを作成するときによく発生するものであり、興味深いものです。なぜこのようなことを言うのでしょうか? これには別のタイプのコードの生成が含まれるため、このタイプのコードに必要な記述構文とルール
を慎重に検討して従う必要があるからです。
データベース内の名前が「O'Keefe」であるユーザーをクエリする場合、SQL ステートメント
の通常の形式は次のようになります:
select * from users where last_name = 'O 'Keefe'
SQL ステートメントの英語の所有文字 (アポストロフィ) はバックスラッシュでエスケープする必要があることに注意してください。 PHP には、このような
状況を処理するための関数がいくつか用意されています。関数 AddSlashes($str) は、文字列内の引用符文字にバックスラッシュ エスケープ文字を自動的に挿入するために使用されます。 sql = "select * from users where last_name = '" .addslashes($last_name);
この例では、二重引用符で囲む必要もあります (SQL 構文の要件)。ここでは
引用符文字列が使用されています。一対の単一引用符をエスケープする必要はありません。次のステートメントは、単一引用符で囲まれた文字列を使用するのと同じです:
$sql = 'select * from users where last_name = '' .addslashes($last_name) ''';データベース内の文字列 文字列内に文字列を記述するときは、内部の引用符でエスケープ記号が正しく使用されていることを確認する必要があります。これは、多くの PHP
初心者が犯しやすい間違いです。


4. 二重引用符と HTML


SQL ステートメントとは異なり、二重引用符は標準 HTML 言語で文字列を表すためによく使用されます (多くのブラウザーは強力なフォールト トレランスを備えています)
、HTML 内の文字列を表すために一重引用符を使用することも、引用符を使用しないこともできます。例:
$html = ''。 ;/a>'; $html = "$link";
HTML 言語はバックスラッシュのエスケープをサポートしていません。データを送信するためのフォームの非表示の入力。非表示の入力の値を設定する最良の方法は、htmlspecialchars() 関数を使用してエンコードすることです。次のステートメントは、
通常、二重引用符を含む可能性のあるデータを送信できます:

1. 引用符は文字列を定義します。引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその元の意味を無視する必要があります。これは、この引用符が文字列の一部であり、引用符であることを PHP に伝えるためです。正しい表現は次のとおりです。一重引用符文字列は他の場所でも使用できます。PHP パーサーは一重引用符文字列を比較的単純な方法で処理するため、二重引用符文字列を使用すると処理速度が速くなります。引用符は文字列の内部的な性質によるもので、解析も必要となるため、より複雑になるため、処理速度が若干遅くなります。

これ...二重引用符はエスケープされますが、一重引用符はエスケープされません
例: /r/n は改行ですが、一重引用符を使用してファイルを作成した場合、それは改行にはなりません、ただし改行文字は、二重引用符でファイルに書き込まれる場合は改行です。
同意します。

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