1. 文字列の定義
PHP では、一重引用符を使用して文字列を定義できます。も使用できます。ただし、文字列を定義するには同じ一重引用符または二重引用符を使用する必要があります。たとえば、「Hello」と「Hello」は無効な文字列定義です。
文字列を定義する場合、区切り文字として考慮される引用符は一重引用符または二重引用符の 1 種類だけです。したがって、文字列が二重引用符で始まる場合は、二重引用符のみがパーサーによって解析されます。このようにして、二重引用符で囲まれた文字列内に他の文字 (一重引用符も含む) を含めることができます。次の引用符文字列は有効です:
Php コード
$s = "私は二重引用符文字列内の '一重引用符文字列';
$s = '私は一重引用符文字列の中の「二重引用符文字列」です';
$s = "私は二重引用符文字列の中の「一重引用符文字列」です"; I am a "double quote string" inside a single quote string';
そして、「なぜ "this" は機能しないのか?」という文字列は 3 つの段落に分かれます。この文字列で二重引用符を表現したい場合は、エスケープ文字「" (バックスラッシュ) を使用して、「なぜ "this" は機能しないのですか?」 のようにすることができます。
2. 文字列変数内の単一引用符と二重引用符
PHP では、二重引用符文字列の中に文字列変数を直接含めることができます。次の 2 つの文字列の処理結果が同じであることがわかります。 。
$full_name = $first_name . ' ' $last_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 は $foon'; // 結果を出力します: foo は $foon
$foo = 2;
echo "foo は $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 "; >
エコー "値 = $a[$i]";
エコー "値 = $foo";
>
次のコードでは、必要な結果を取得できません:
echo "value = $a[$i][$j]" //2 次元配列の要素を出力したいと考えています。 $a。
これらの文字列を使用する際の潜在的な問題を回避するには、通常、次のように複雑な変数を文字列から分離します。 echo 'value = ' . $a[$i][$j ];// ドット (. ) 文字列を接続する
もう 1 つの方法は、構文アナライザーがそれらを正しく識別できるように、複雑な変数を中括弧で囲むことです:
echo " value = {$a[$i][$ j]}" //二次元配列 $a の要素を出力
このようにして、新たな問題が発生します。文字列内で中括弧文字自体を引用したい場合は、エスケープ文字を使用することを忘れないでください。
Php code
$var = 3; " value = {$var}"; // 結果を出力します "value = 3"
echo "value = {$var}" // 結果を出力します "value = {3}"
$var = 3;
echo "value = {$var}" // 結果を出力 "value = 3"
echo "value = {$var}"; result "value = {3}"
3. SQL ステートメント
これは、データベースに挿入される 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 で Magic-quotes オプションを設定することです。このオプションがオンになっている場合、
追加: これは二重引用符と一重引用符の役割から始まります。二重引用符で囲まれたフィールドは、
例:
$abc='I love u';
echo $abc //結果は次のとおりです: 愛しています。
echo '$abc' // 結果は次のとおりです: $abc
echo "$abc" // 結果is: I love you
So 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." ' ";
SQL2="select * from table where user=' abc ' "
一重引用符の間にスペースを少し追加しました
つまり、'abc' を ' ".$user." に置き換えると、SQL 文字列全体が分割されるだけです。次の 3 つの部分に分解できます
1: "select * from table where user=' "
2: $user
3: " ' "
文字列は . で繋がっているので