ホームページ > バックエンド開発 > PHPチュートリアル > PHP の一重引用符と二重引用符の違い_PHP チュートリアル

PHP の一重引用符と二重引用符の違い_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:42:54
オリジナル
850 人が閲覧しました

1.文字列を定義する

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

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

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


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


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

コードをコピーします
コードは次のとおりです: $full_name = $first_name . $last_name = "$first_name $last_name";
PHP の引用文字列 処理は同じではありません。二重引用符で囲まれた文字列の内容は解釈して置換できますが、一重引用符で囲まれた文字列の内容は常に通常の文字とみなされます。例:
Php コード


コードをコピー

コードは次のとおりです:
$foo = 2; echo "foo is $foo" // 結果を出力します: foo is 2 echo 'foo is $foo'; // 出力結果: foo は $foo
echo "foo is $foon"; // 出力結果: foo は 2 (改行あり)
echo 'foo は $foon' // 出力結果: foo は$foon
$ foo = 2;
echo "foo is $foo"; // 結果を出力: foo は 2
echo 'foo is $foo' // 結果を出力: foo は $foo
echo " "; // 印刷結果: foo is 2 (with newline)
echo 'foo is $foon'; // 印刷結果: foo is $foon


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


コードをコピーする

コードは次のとおりです。 echo "value = $a[$i]";
echo "value = $foo"; echo "value = $a[$i]" 次のコードは必要な結果を取得できません: echo " value = $a[$i][$j]"; //二次元配列 $a の要素を出力したい。
これらの文字列の使用における潜在的な問題を回避するために、通常は次のように複雑な変数を文字列から分離します: echo 'value = ' . $a[$i][$j];//文字 接続にはドット (.) を使用します。文字列
もう 1 つの方法は、構文アナライザーがそれらを正しく識別できるように、複雑な変数を中括弧で囲むことです。
echo "value = {$a[$i][$j]}" //2 つの要素を出力します。次元配列 $a
このようにして、新たな問題が発生します。文字列内で中括弧文字自体を引用したい場合は、エスケープ文字を使用することを忘れないでください:
Php コード


コードをコピー

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


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

3. SQL ステートメントの場合

これはよく発生する問題です。データベースに挿入される SQL ステートメントでは、一重引用符を含む文字列をデータベースに挿入する必要があります。発言は間違ってしまいます。
例: $sql="insert into userinfo (username,password) Values('O'Kefee','123456')"
このときの処理方法の1つは、SQL文にエスケープ文字のバックスラッシュを追加することです
つまり:...Values('O'Kefee',...
もちろん、addslashes() 関数を使用することもできます。この関数の機能はエスケープ文字を追加することです。
つまり: $s = addlashes("O'Kefee") … …Values('".$s."',...
もう 1 つの方法は、php.ini でマジッククオート オプションを設定することです。このオプションがオンになっている場合、フォームを通じて送信された情報に一重引用符が含まれている場合、エスケープ文字が自動的に追加されるため、他の関数を使用する必要はありません。
追加: これは二重引用符と一重引用符の役割から始まります。コンパイラによって解釈され、HTML コードとして出力されます。ただし、一重引用符内の単語は説明する必要がなく、直接出力されます。
例:
コードをコピーします。 コードは次のとおりです。
$abc='私はあなたを愛しています';
echo $abc //結果は次のようになります: 私はあなたを愛しています
echo '$abc' // 結果は次のようになります: $abc
echo "$abc" // 結果は次のようになります:愛しています


したがって、データベース内の SQL ステートメントに値を割り当てるときは、SQL= を二重引用符で囲んで使用する必要があります。ただし、SQL ステートメントには単一引用符が含まれます。フィールド名を引用符で囲みます
例: select * from table where user='abc';
ここでの SQL ステートメントは、SQL=" select * from table where user='abc'" として直接書くことができます
ただし、次のような場合以下:


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


2. 文字列接続



$first_name = 'Charlie'; $full_name = $first_name のように、文字列コネクタ (.) を使用して接続できます。 . $last_name;
一般的な使用法は、HTML 文字列コードの大きなブロックを作成することです。次のように、割り当て記号 (=) と接続記号 (.) を (.=) 記号
に結合できます。 html = '<テーブル>';
$html .= '番号正方形'; 0 ; $i$square = $i;
$html .= ' ' . $square . '';
$html .= ''; この機能により、次のことが可能になります。連結記号を使用して、多数の単純な文字列を結合します。 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 " foon "; // 印刷結果: foo is 2 (with newline)
echo 'foo is $foon'; // 印刷結果: foo is $foon
ご覧のとおり、単一引用符の文字列ではバックスラッシュさえも使用されていません。拡張された意味 (バックスラッシュ \ の挿入と単一の
引用符 ' の挿入を除く)。したがって、変数置換を実行し、文字列に n (改行文字) などのエスケープ シーケンスを含める場合は、二重引用符 を使用する必要があります。一重引用符文字列は他の場所でも使用できます。スクリプト内で一重引用符文字列を使用すると、処理速度が速くなります。これは、PHP パーサーが一重引用符文字列を比較的単純な方法で処理する一方で、二重引用符の処理には文字列内の解析も必要となるためです。 , より複雑になるため、処理速度は若干遅くなります。
文字列内の変数の複雑な組み合わせを参照する場合、いくつかの問題が発生する可能性があります。次のコードは正常に動作します。
echo "value = $a[$i]";望む結果が得られません:
echo "value = $a[$i][$j]"; //2 次元配列 $a の要素を出力したいとします。
文字列を使用する際のこれらの潜在的な問題を回避するには、通常、次のように、複雑な変数を文字列から分離します。パーサーが中括弧を正しく識別できるようにするため:
echo "value = {$a[$i][$j]}" //2 次元配列の特定の要素を出力 $a element
このようにして、新たな問題が発生します。文字列内で中括弧文字自体を引用したい場合は、必ずエスケープ文字を使用する必要があります。
$var = 3;
echo "value = {$var}"; // 結果を出力します。 "
echo "value = {$var}"; // Print result "value = {3}"


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


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


4. 二重引用符と HTML


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

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

これ...二重引用符はエスケープされますが、一重引用符はエスケープされません
例: /r/n は改行ですが、一重引用符を使用してファイルを記述すると、それは改行ではなく文字になります。二重引用符を使用すると、ファイルへの書き込みは改行を意味します
同意します。



http://www.bkjia.com/PHPjc/320827.html

www.bkjia.com

本当

http://www.bkjia.com/PHPjc/320827.html

技術記事

1. 文字列を定義する PHP では、一重引用符または二重引用符を使用して文字列を定義できます。ただし、文字列を定義するには同じ一重引用符または二重引用符を使用する必要があります (例: 'Hello" と...

)
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート