1 PHP における単一引用符と二重引用符の違い
PHP では、通常、文字列は次のように 1 対の引用符で定義されます。
'I am a string in single quotes'
"I am a string in double quotes"
PHP パーサーは、文字列を判断するために引用符のペアを使用します。したがって、すべての文字列で同じ一重または二重引用符
を使用して開始と終了を定義する必要があります。たとえば、次の文字列定義は不正です:
「一致しない引用符があるため、私は有効な文字列ではありません。
'私もです!」
文字列を定義する場合、 1 種類の引用符 (一重引用符または二重引用符) が区切り文字とみなされます。したがって、文字列が二重引用符
で始まる場合、二重引用符のみがパーサーによって解析されます。このようにして、二重引用符で囲まれた文字列内に他の文字 (一重引用符
記号も含む) を含めることができます。次の引用符文字列は有効です:
$s = "私は二重引用符文字列内の「単一引用符文字列」です";
$s = '私は単一引用符文字列内の「二重引用符文字列」です。引用文字列';
PHP は文字列の先頭に対応する引用符を見つけると、文字列の終わりに達したと判断します。そのため、次のようにします。
これは実際には PHP パーサーによって 3 つの部分に分割されます:
「なぜ "—単一引用符を含む二重引用符の文字列
this—冗長です」文字列の場合、パーサーは
" work?" - 通常の文字列
を処理できません。上記の例では、二重引用符文字列に二重引用符を含めようとしていますが、2 番目の二重引用符に遭遇するとパーサーは失敗します。
は終わります。引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその元の意味を無視する必要があります。これは、この引用符が文字列の一部であることを PHP に伝えるために、引用符
の前にバックスラッシュを追加します。正しい表現は次のとおりです:
「なぜ "that" は機能しないのですか?
英語の文字列でよくある問題は、アポストロフィ ' の使用です。これは、一重引用符が非常に複雑であるためです。英語の文字列
(英語の所有格) で一般的です。次の文字には注意する必要があります:
'アポストロフィはエスケープしたほうがよい'
バックスラッシュ自体が必要な場合、文字列内で特別な意味を持つことがわかります。が含まれている場合は、
記号の前にバックスラッシュを追加する必要があります。例:
$file = "c:windowssystem.ini";
echo $file; // 出力結果は次のようになります: c:windowssystem.ini
$file = "c:\windows \system .ini";
echo $file; // 出力結果は次のとおりです: c:windowssystem.ini
文字列を定義する別の方法。これにより、特殊文字の問題がなくなり、文字列の定義が容易になります。長いテキストを引用します。文字列定義メソッド
は、<<< 記号で始まり、その後にカスタム文字列が続き、最後の行はカスタム文字列で終わり、ボックス内にある必要があります。
2. 文字列接続
文字列は、次のように文字列連結文字 (.) を使用して接続できます。 >$last_name = 'Brown';
$full_name = $first_name . ' . $last_name;
一般的な使用法は、(=) 接続を割り当てることです。 .) は、次のように省略してシンボル (.=) シンボル
に結合できます。
$html = '
square | ';
' . / tr>'; } $html .= ' |
引用符')。したがって、変数置換を実行し、文字列に n (改行文字) などのエスケープ シーケンスを含める場合は、二重引用符
を使用する必要があります。一重引用符文字列は他の場所でも使用できます。PHP 構文アナライザーは
一重引用符文字列を比較的単純な方法で処理するのに対し、二重引用符の処理も複雑であるため、スクリプト内で一重引用符文字列を使用すると処理速度が速くなります。文字列内を解析する必要があるため、複雑になり、処理速度が若干遅くなります。
文字列内の変数の複雑な組み合わせを参照する場合、いくつかの問題が発生する可能性があります。
echo "value = $foo";
echo "value = $a[ $i]";
そして、次のコードは望む結果を取得できません:
echo "value = $a[$i][$j]"; / /出力したい2 次元配列 $a の要素。
文字列を使用する際のこれらの潜在的な問題を回避するには、通常、次のように複雑な変数を文字列から分離します。
echo 'value = '
もう 1 つの方法は、複雑な変数を中かっこで囲んで、パーサーがそれらを正しく識別できるようにすることです。
echo "value = {$a [$i][$j]}" //二次元配列 $a の要素を出力する
このようにして、新たな問題が発生します。文字列内で中括弧文字自体を引用したい場合は、次のようにエスケープ文字を使用する必要があります。
$var = 3; print Result "value = 3"
echo "value = {$var}"; // print result "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) . "'";
この例では、last_name 文字列も一重引用符で囲みます。 )、ここでは二重引用符文字列が使用されているため、一重引用符のペアをエスケープする必要はありません。次のステートメントは、単一引用符文字列を使用するのと同じです:
$sql = 'select * from users where last_name = '' .addslashes($last_name) ''';データベースに文字列を書き込むときは、内部の引用符が適切にエスケープされていることを確認する必要があります。これは、多くの PHP 初心者が犯すよくある間違いです。
4. 二重引用符と HTML
SQL ステートメントとは異なり、二重引用符は標準 HTML 言語で文字列を表すためによく使用されます (多くのブラウザーには強力なフォールト トレランス機能があり、文字列を次のように表現できます)。 HTML では一重引用符を使用することも、引用符なしで表現することもできます)。例:
$html = ''.$link.' a>';
$html = "$link";
HTML 言語はバックスラッシュ エスケープをサポートしていません。フォームの非表示の入力を使用してデータを送信します。非表示の入力の値を設定する最良の方法は、htmlspecialchars() 関数を使用してエンコードすることです。通常、次のステートメントは二重引用符を含む可能性のあるデータを送信できます:
1. 引用符は文字列を定義します。引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその元の意味を無視する必要があります。これは、この引用符が文字列の一部であり、引用符であることを PHP に伝えるためです。正しい表現は次のとおりです。一重引用符文字列は他の場所でも使用できます。PHP パーサーは一重引用符文字列を比較的単純な方法で処理するため、二重引用符文字列を使用すると処理速度が速くなります。引用符は文字列の内部的な性質によるもので、解析も必要となるため、より複雑になるため、処理速度が若干遅くなります。
これ...二重引用符はエスケープされますが、一重引用符はエスケープされません
例: /r/n は改行ですが、一重引用符を使用してファイルを作成した場合、それは改行にはなりません、ただし改行文字は、二重引用符でファイルに書き込まれた場合、改行です。