この記事では、多数の実装を使用して、一重引用符と二重引用符の使用法と違いを紹介しています。詳しく知りたい学生は、この記事を注意深く参照してください。
PHP では、通常、文字列は一対の引用符内で定義されます
以下の手順に従ってください:
コードは次のとおりです |
コードをコピー |
$out = str_replace(array('rn', 'r', 'n'), '', $out);PHP は文字列を定義する 3 つの方法を提供します: 一重引用符、二重引用符、ローカル ドキュメント (ここでは英語ドキュメントで呼びます)またはヒアドキュメント)。
|
単一引用符:
PHP は組み込み変数と一重引用符で囲まれた文字列内のエスケープ シーケンスをチェックしないため、一重引用符を使用するのが最も効率的です。エスケープする必要がある文字はバックスラッシュと一重引用符自体だけです。
二重引用符:
組み込み変数とエスケープ シーケンスはチェックされますが、エスケープされた一重引用符は認識されません。これは、最初のコードの何が間違っているかも示しています。正しいアプローチは、二重引用符を使用して改行のエスケープ シーケンスを定義することです。
コードは次のとおりです
| コードをコピー
|
$out = str_replace(array("rn", "r", "n"), '', $out);
|
ローカルドキュメント:
すべての組み込み変数とエスケープ シーケンスを確認してください。二重引用符をエスケープする必要はありません。例:
コードは次のとおりです
| コードをコピー
|
エコー <<
これは「ヒアドキュメント」の例です
テスト用です
EOT; 記録するだけで印象が深まります。
、たとえば:
コードは次のとおりです
| コードをコピー
|
「私は一重引用符で囲まれた文字列です」
「私は二重引用符で囲まれた文字列です」
|
PHP パーサーは文字列を決定するために引用符のペアを使用します。したがって、すべての文字列は同じ single または double を使用する必要があります
開始と終了を定義する引用符。たとえば、次の文字列定義は無効です:
コードは次のとおりです
| コードをコピー
|
「一致しない引用符があるため、有効な文字列ではありません」
「私も違うよ!」
|
文字列を定義する場合、区切り文字として考慮される引用符は一重引用符または二重引用符の 1 種類のみです。したがって、文字列が二重引用符で囲まれている場合
の場合、二重引用符のみがパーサーによって解析されます。こうすることで、二重引用符で囲まれた文字列内に他の文字 (一重引用符も含む) を含めることができます
番号。次の引用符文字列はすべて有効です:
コードは次のとおりです |
コードをコピー |
$s = "私は二重引用符文字列内の「単一引用符文字列」です";
$s = '私は一重引用符文字列内の「二重引用符文字列」です';
PHP は、文字列の先頭に対応する引用符を見つけると、文字列の終わりに達したと判断します。そのため、次のようになります。
「なぜ「これ」がうまくいかないのですか?」
実際には、PHP パーサーによって次の 3 つの部分に分割されます。
「Why doesn't」—一重引用符を含む二重引用符文字列
これ - 余分な文字、パーサーは処理できません
「仕事?」 - 普通の文字列
| 上記の例では、二重引用符文字列内に二重引用符を含めようとしていますが、パーサーは 2 番目の二重引用符に遭遇したときに文字列が終了しているとみなします
終了した。引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその引用符の
を使用する必要があります。
この引用符が文字列の一部であることを PHP に伝えるには、その前にバックスラッシュを追加します。正しい表現は次のとおりです。
コードは次のとおりです
コードをコピー
|
| 「なぜ「それ」はうまくいかないのですか?」
英語の文字列でよくある問題は、アポストロフィ ' の使用です。これは単一引用符であり、英語の文字列では非常に一般的であるためです |
(英語の所有格)。次の文字には注意する必要があります:
コードは次のとおりです
コードをコピー
|
| 「アポストロフィは避けたほうがいいです」
文字列の中でバックスラッシュ自体が特別な意味を持っていることがわかります。文字列にバックスラッシュ自体を含める必要がある場合は、 | に含める必要があります。
この記号の前には余分なバックスラッシュが付きます。例:
コードは次のとおりです
コードをコピー
|
| $file = "c:windowssystem.ini";
echo $file; // 出力結果は次のようになります: c:windowssystem.ini
$file = "c:windowssystem.ini";
echo $file; // 出力結果は次のようになります: c:windowssystem.ini
特殊文字の問題を排除し、長いテキストの引用を容易にする文字列を定義する別の方法。文字列定義メソッド
このメソッドは <<< 記号で始まり、その後にカスタム文字列が続き、最後の行はカスタム文字列で終わり、ボックス内にある必要があります。
|
2.文字列接続
次のように、文字列連結文字 (.) を使用して文字列を接続できます。
コードは次のとおりです
コードをコピー
$first_name = 'チャーリー';
$last_name = 'ブラウン';
$full_name = $first_name . $last_name; |
|
一般的な使用法は、HTML 文字列コードの大きなブロックを作成することです。割り当て記号 (=) とコネクタ (.) を省略して (.=) 記号に結合できます。
番号 (例:
)
コードは次のとおりです
| コードをコピー
|
$html = '<テーブル>';
$html .= ' |
数字 | 四角 |
';
for ( $i=0 ; $i
$square = $i * $i;
$html .= '' .$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 は $foon' // 結果を出力: foo は $foon;
ご覧のとおり、一重引用符で囲まれた文字列では、バックスラッシュもその拡張された意味を失います(バックスラッシュの挿入と一重引用符 ' の挿入を除く)。したがって、変数置換を実行し、文字列に n (改行) などのエスケープ シーケンスを含める場合は、二重引用符を使用する必要があります
番号。一重引用符文字列は他の場所でも使用できます。PHP パーサーは に敏感であるため、スクリプト内で一重引用符文字列を使用すると処理速度が速くなります。
シングルクォート文字列の処理方法は比較的シンプルですが、ダブルクォート文字列の処理は内部で解析する必要があるため、より複雑になるため、処理速度は
若干遅いです。 |
文字列内の変数の複雑な組み合わせを参照すると、いくつかの問題が発生する可能性があります。次のコードは正常に動作します。
コードは次のとおりです
コードをコピー
エコー "値 = $foo";
echo "値 = $a[$i]";
|
|
しかし、次のコードは私たちが望む結果を得ることができません:
コードは次のとおりです
| コードをコピー
echo "value = $a[$i][$j]"; //二次元配列 $a の要素を出力したい。
|
文字列を使用する際のこれらの潜在的な問題を回避するために、通常は次のように複雑な変数を文字列から分離します。
コードは次のとおりです
| コードをコピー
|
エコー '値 = ' . $a[$i][$j];
|
別の方法は、パーサーがそれらを正しく識別できるように、複雑な変数を中括弧で囲むことです:
コードは次のとおりです
| コードをコピー
|
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 ステートメントは次の形式になります。
こんな感じです:
コードは次のとおりです
コードをコピー
|
| last_name = 'O'Keefe' のユーザーから * を選択
SQL ステートメント内の英語の所有文字 (アポストロフィ) はバックスラッシュでエスケープする必要があることに注意してください。 PHP はこれを処理するための関数をいくつか提供しています |
この場合、関数 AddSlashes($str) の目的は、文字列内の引用文字にバックスラッシュ エスケープ文字を自動的に挿入することです。
コードは次のとおりです
コードをコピー
|
$last_name = "オキーフ";
$sql = "select * from users where last_name = '" .addslashes($last_name) "'"; |
この例では、二重引用符が使用されているため、last_name 文字列 (SQL 構文で必須) を一重引用符で囲む必要もあります
引用符の文字列なので、一重引用符のペアをエスケープする必要はありません。次のステートメントは、一重引用符文字列を使用するのと同じです:
|
コードは次のとおりです
コードをコピー
| $sql = 'select * from users where last_name = '' .addslashes($last_name) ';
|
データベースに文字列を書き込むときは常に、内部の引用符が適切にエスケープされていることを確認する必要があり、これには多くの PHP が必要です
初心者が陥りやすい間違い。
4. 二重引用符と HTML
SQL ステートメントとは異なり、二重引用符は標準 HTML 言語で文字列を表すためによく使用されます (多くのブラウザーには強力なフォールト トレランス機能が備わっています
はい、HTML で文字列を表すために一重引用符を使用することも、引用符を使用しなくても許可されます。例:
HTML 言語はバックスラッシュのエスケープをサポートしていません。これは、フォームの非表示の入力を使用してデータを送信するときに発生します
わかった。非表示の入力の値を設定する最良の方法は、htmlspecialchars() 関数を使用してエンコードすることです。次の文は次のようになります
二重引用符が含まれる可能性のあるデータを通常どおり送信するには:
コードは次のとおりです
| コードをコピー
|
|
1. 引用符は文字列を定義します。引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその元の意味を無視する必要があります。これは、この引用符が文字列の一部であり、引用符であることを PHP に伝えるためです。正しい表現は次のとおりです。一重引用符文字列は他の場所でも使用できます。PHP パーサーは一重引用符文字列を比較的単純な方法で処理するため、二重引用符文字列を使用すると処理速度が速くなります。引用符は文字列の内部的な性質によるもので、解析も必要となるため、より複雑になるため、処理速度が若干遅くなります。
これは...二重引用符はエスケープされますが、一重引用符はエスケープされません
例: /r/n は改行ですが、一重引用符でファイルを作成すると、それは改行ではなく文字になります。二重引用符でファイルを作成すると、それは改行になります。
最後に、他のウェブサイトの意見をチェックしてください
” ” 二重引用符内のフィールドはコンパイラーによって解釈され、HTML コードとして出力されます。
‘ ‘ 一重引用符内の単語は解釈されず、直接出力されます。
文字通りの意味から、一重引用符の方が二重引用符よりも高速であることがわかります。
例:
コードは次のとおりです
コードをコピー
|
| $abc='私の名前はトメ';
echo $abc //結果は次のようになります: 私の名前はトムです
echo ‘$abc’ //結果は次のようになります:$abc
echo “$abc” //結果は次のようになります: 私の名前はトムです
| 特に MYSQL ステートメントを使用する場合、二重引用符と一重引用符の使用法は初心者にとって混乱を招く可能性があります。ここで例を示します。
クエリ条件で定数が使用されていると仮定します。例:
コードは次のとおりです
コードをコピー
|
|
select * from abc_table where user_name=’abc’;
SQL ステートメントは次のように記述できます:
コードは次のとおりです |
コードをコピー |
SQLstr = "select * from abc_table where user _name= ‘abc’" ;
|
クエリ条件で変数が使用されていると仮定します。例:
コードは次のとおりです |
コードをコピー |
$user_name = $_REQUEST['user_name'] //文字列変数 ;
|
または
コードは次のとおりです |
コードをコピー |
$user=array ("name"=>$_REQUEST['user_name‘,"age"=>$_REQUEST['age'];//配列変数
|
SQL ステートメントは次のように記述できます:
コードは次のとおりです |
コードをコピー |
SQLstr = "select * from abc_table where user_name = ' $user_name .
SQLstr = “select * from abc_table where user_name = ‘ ” ” ‘ “;
|
比較:
コードは次のとおりです
| コードをコピー
|
SQLstr=”select * from abc_table where user_name = ‘ abc ‘ ” ;
SQLstr=”select * from abc_table where user_name =’ ” $user _name .
SQLstr=”select * from abc_table where user_name =’ ” . ” ‘ “;
|
SQLstr は次の 3 つの部分に分解できます:
コードは次のとおりです
| コードをコピー
|
1: “select * from table where user_name = ‘ ” // SQL ステートメントを修正しました
2: $user //変数
3:「」
文字列の 1、2、3 の部分の間には「.」 を使用します。
|
|
http://www.bkjia.com/PHPjc/632232.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632232.html技術記事この記事では、多数の実装を使用して、一重引用符と二重引用符の使用法と違いを紹介しています。詳しく知りたい学生は、この記事を注意深く参照してください。 PHP では通常 1 文字...
|
声明:この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。