php
における一重引用符と二重引用符の違い
プログラミング言語では、一重引用符であろうと二重引用符であろうと、それらは非常に重要な役割を果たします。これは PHP 言語にも当てはまります。 ASP と比較すると、PHP の引用符は使いやすいです。ASP では、データを変数に代入する場合は二重引用符を使用する必要があり、引用符の中で使用する場合は二重引用符のみを使用できます。二重引用符が使用されている場合、前の引用符の終わりとして扱われます。しかし、PHP ではそのような制限はありません。変数に値を代入するには、一重引用符と二重引用符の両方を使用できますが、これらはペアで使用する必要があります。
PHP では、変数を含まないテキストデータにのみ使用される場合、シングルクォートとダブルクォーテーションの違いはありません。ただし、変数を使用する場合は、一重引用符と二重引用符には違いがあります。 PHP では、定義や他の記号を変更せずに、変数を二重引用符で直接置換できます。 $b="cat";$a="Thisisa$b";//Thisisacat が表示される場合、単一引用符は機能しません。 $a ='Thisisa$b' の場合、Thisisa$b と表示されます。
一重引用符と二重引用符には、動作効率の点でも違いがあります。一般に、一重引用符は実行が速くなりますが、二重引用符は最初に変数が存在するかどうかを検索する必要があるためです。ステートメントでは、引用符は使用されないため、ステートメント内で置換される変数がない場合は、単一引用符を使用するようにしてください。これは、プログラムの効率を上げることを常に考えてプログラムを書く習慣です。
ステートメント内の定義演算を変換する場合は、二重引用符を使用する必要があります。たとえば、一重引用符を再定義する場合は、次のように記述します: $a='He'snameisTom.'、次のように記述すると、プログラムは He'snameisTom を変更せずに表示します。 「彼の名前はトムです。
」と表示されます。一重引用符は SQL ステートメントの障害となります。SQL ステートメント内のテキスト データは一重引用符で囲む必要があります。そのため、データ内に一重引用符が含まれる場合、データベースはデータの終わりを考慮し、その後に次のデータを考慮します。 SQL ステートメントの他のコンポーネントは、データベースへのクエリ時にエラーを報告するため、SQL ステートメントに書き込まれるテキスト データは、addslashes() 関数を使用して一重引用符に変換し、その後、stripslashes() を使用して逆変換する必要があります。データを読み取るとき。
PHP の一重引用符と二重引用符からわかるように、PHP 言語は非常に柔軟で思慮深いため、ASP 言語よりも実行可能であることがわかります。
PHP における一重引用符と二重引用符の違い
PHP では、通常、文字列は次のように 2 つの引用符で囲んで定義されます。
'Iamastringinsinglequotes'
「二重引用符の Iamastring」
PHP 構文アナライザーは、引用符のペアを使用して文字列を決定します。したがって、すべての文字列で同じ一重引用符または二重引用符を使用して開始と終了を定義する必要があります。たとえば、次の文字列定義は無効です:
「引用符が一致しないため、無効な文字列です」
「どちらでも!」
文字列を定義する場合、区切り文字として考慮される引用符は一重引用符または二重引用符の 1 種類だけです。したがって、文字列が二重引用符で表されている場合
の場合、二重引用符のみがパーサーによって解析されます。このようにして、二重引用符で囲まれた文字列に、単一引用符で囲まれた
であっても、他の文字を含めることができます。番号。次の引用符文字列は有効です:
$s="Iama'singlequotestring'insideadoublequotestring";
$s='Iama"doublequotestring"insideasinglequotestring';
PHP は、文字列の先頭に対応する引用符を見つけると、文字列の終わりに達したと判断します。そのため、次のようになります。
「なぜ「これ」がうまくいかないのですか?」は、実際には PHP パーサーによって 3 つの部分に分割されます:
「Whydoesn't」 - 一重引用符を含む二重引用符文字列
これ—余分な文字です。パーサーはそれを処理できません
「仕事?」 - 通常の文字列
上記の例では、二重引用符文字列内に二重引用符を含めようとしていますが、パーサーは 2 番目の二重引用符に遭遇したときに文字列が終了していると見なします
もう終わりです。引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその本来の意味を無視する必要があります。引用符内で
を使用します。
の前にバックスラッシュを追加して、この引用符が文字列の一部であることを PHP に伝えます。正しい表現は次のとおりです。「なぜそれはうまくいかないのですか?」
英語の文字列でよくある問題は、アポストロフィ ' の使用です。これは単一引用符であり、英語の文字列では非常に一般的であるためです
(英語の所有格)。次の文字には注意する必要があります:
「ポストトロフィスから逃れたほうがいいよ」
バックスラッシュ自体が文字列内で特別な意味を持っていることがわかります。文字列にバックスラッシュ自体を含める必要がある場合は、
内に含める必要があります。この記号の前にバックスラッシュを追加します。例:
$file="c:windowssystem.ini";
echo$file;//印刷結果は次のとおりです: c:windowssystem.ini
$file="c:\windows\system.ini";
echo$file;//印刷結果は次のとおりです: c:windowssystem.ini
文字列を定義するもう 1 つの方法は、特殊文字の問題を排除し、長いテキストの引用を容易にします。文字列定義メソッド
メソッドは <<< 記号で始まり、その後にカスタム文字列が続き、最後の行はカスタム文字列で終わり、ボックス内になければなりません。
2. 文字列接続
文字列は、次のように文字列連結文字 (.) を使用して接続できます。
$first_name='チャーリー';
$last_name='ブラウン';
$full_name=$first_name.''.$last_name;
一般的な使用法は、HTML 文字列コードの大きなブロックを作成することです。割り当て記号 (=) とコネクタ (.) は省略して (.=) 文字に結合できます。
番号 (例:
)$html='<テーブル>';
$html.='
for($i=0;$i
$square=$i*$i;
$html.='
}
$html.='';
3. 文字列で変数を使用する
この機能を使用すると、連結記号を使用せずに多数の単純な文字列を結合できます。 PHP では、単語
を二重引用符で囲まれた文字列内に直接含めることができます文字列変数では、次の 2 つの文字列の処理結果が同じであることがわかります。
$full_name=$first_name.''.$last_name;
$full_name="$first_name$last_name";
一重引用符文字列と二重引用符文字列は、PHP では異なる方法で処理されます。二重引用符で囲まれた文字列の内容は解釈および置換できますが、一重引用符で囲まれた
は解釈および置換できます。文字列の内容は常に通常の文字とみなされます。例:
$foo=2;
echo "fois$foo";//結果を出力: foois2
echo'fois$foo';//出力結果: foois$foo
echo "fois$foon";//出力結果: foois2 (同時に改行)
echo'fois$foon';//出力結果: foois$foon
ご覧のとおり、一重引用符で囲まれた文字列ではバックスラッシュも拡張された意味を失います (バックスラッシュ \ の挿入と単一の
の挿入を除く)引用符')。したがって、変数置換を実行し、文字列に n (改行文字) などのエスケープ シーケンスを含める場合は、二重引用符
を使用する必要があります。番号。一重引用符文字列は他の場所でも使用できます。PHP パーサーは
に敏感であるため、スクリプト内で一重引用符文字列を使用すると処理速度が速くなります。一重引用符文字列の処理方法は比較的簡単ですが、二重引用符文字列の処理は内部で文字列を解析する必要があるためより複雑であるため、処理速度が速くなります
少し遅くなります。
文字列内の変数の複雑な組み合わせを参照する場合、いくつかの問題が発生する可能性があります。次のコードは正常に機能します。
エコー "value=$foo";エコー "value=$a[$i]";
次のコードでは、必要な結果が得られません:
echo "value=$a[$i][$j]";//二次元配列 $a の要素を出力したいとします。
文字列を使用する際のこれらの潜在的な問題を回避するために、通常は次のように複雑な変数を文字列から分離します。
echo'value='.$a[$i][$j];
もう 1 つの方法は、複雑な変数を中括弧で囲んで、パーサーがそれらを正しく識別できるようにすることです。
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*fromuserswherelast_name='オキーフ'
SQL ステートメントの英語の所有文字 (アポストロフィ) はバックスラッシュでエスケープする必要があることに注意してください。 PHP はこれを処理するための関数をいくつか提供しています
の場合、関数 AddSlashes($str) の目的は、文字列内の引用文字にバックスラッシュ エスケープ文字を自動的に挿入することです:
$last_name="オキーフ";
$sql="select*fromuserswherelast_name='".addslashes($last_name)."'";
この例では、二重
が使用されているため、last_name 文字列を一重引用符で囲む必要もあります (SQL 構文で必須)。
引用符文字列なので、この一重引用符のペアにエスケープを使用する必要はありません。次のステートメントは、一重引用符文字列を使用するのと同じです:$sql='select*fromuserswherelast_name=''.addslashes($last_name).''';
データベースに文字列を書き込むときは常に、内部の引用符が適切にエスケープされていることを確認する必要があり、これには PHP で多大な労力がかかります
初心者が陥りやすい間違い。
4. 二重引用符と HTML
SQL ステートメントとは異なり、標準 HTML 言語で文字列を表すために二重引用符がよく使用されます (多くのブラウザーには強力なフォールト トレランス機能が搭載されています
はい、HTML では文字列を表すために一重引用符を使用することも、引用符なしでさえも使用できます。例:
$html='
$html="
HTML 言語はバックスラッシュのエスケープをサポートしていません。これは、フォームの非表示の入力を使用してデータを送信するときに発生します
わかりました。 hiddeninputs の値を設定する最良の方法は、htmlspecialchars() 関数を使用してエンコードすることです。次の文は
になります。
二重引用符が含まれる可能性のあるデータを通常に送信するには:
一、引号定义字符串。要达到包含引号的目的,必须分析器在遇到串内普通引号的时候忽略它的原意,我们在引号的前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对单引号串的处理方式比较单纯,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速度略慢。
这个...双引号转义,单引号不转义
如:/r/n是换行,但是如果你用单引号写入文件,不会是换行,而是一个字符,如果用双引号写入文件,就是换行.
一、引号定义字符串
在PHP中,通常一个字符串被定义在一对引号中,如:
'Iamastringinsinglequotes'
"Iamastringindoublequotes"
PHP语法分析器是用成对的引号来判断一个字符串的。因此,所有字符串必须使用同一种单或者双
引号来定义开始和结束。例如,下面的字串定义是不合法的:
"IamnotavalidstringsinceIhaveunmatchingquotemarks'
'Meneither!"
定义字符串时,只有一种引号被视为定义符,即单引号或双引号。于是,如果一个字符串由双引
号开始,那么只有双引号被分析器解析。这样,你就可以在双引号串中包含任何其他字符,甚至单引
号。下面的引号串都是合法的:
$s="Iama'singlequotestring'insideadoublequotestring";
$s='Iama"doublequotestring"insideasinglequotestring';
当PHP遇到与串的开头相对应的引号时,便认为已经到了字符串尾部,于是:
"Whydoesn't"this"work?"
实际上被PHP语法分析器分成三个部分:
"Whydoesn't"――包含一个单引号的双引号串
this――多余的字符,分析器无法处理
"work?"――普通字符串
上面的这个例子企图在双引号串中包含双引号,而分析器在遇到第二个双引号时便认为字符串结
束了。要达到包含引号的目的,必须分析器在遇到串内普通引号的时候忽略它的原意,我们在引号的
前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:
"Whydoesn't\"that\"work?"
在英文字符串中一个常见的问题是撇号'的使用,因为它就是一个单引号,而在英文串中十分常见
(英文所有格)。你必须小心处理这些字符:
'You\'dbetterescapeyourapostrophes'
可以看到反斜杠在字符串中有他的特殊含义,当我们需要在字符串中包含反斜杠本身时,需要在
该符号前面多加一个反斜杠。例如:
$file="c:\windows\system.ini";
echo$file;//打印结果为:c:windowssystem.ini
$file="c:\\windows\\system.ini";
echo$file;//打印结果为:c:\windows\system.ini
另一种字符串定义方式,能够消除特殊字符的烦恼,而且便于引用较长的文本。该字符串定义方
法以<<<符号紧跟一个自定义字符串开头,最后一行以该自定义字符串结束,并且必须顶格。
二、字串的连接
字串可以使用字串连接符(.)来连接,如:
$first_name='チャーリー';
$last_name='ブラウン';
$full_name=$first_name.''.$last_name;
一般的な使用法は、HTML 文字列コードの大きなブロックを作成することです。割り当て記号 (=) とコネクタ (.) は省略して (.=) 文字に結合できます。
番号 (例:
)$html='<テーブル>';
$html.='
for($i=0;$i
$square=$i*$i;
$html.='
}
$html.='';
3. 文字列で変数を使用する
この機能を使用すると、連結記号を使用せずに多数の単純な文字列を結合できます。 PHP では、単語
を二重引用符で囲まれた文字列内に直接含めることができます文字列変数では、次の 2 つの文字列の処理結果が同じであることがわかります。
$full_name=$first_name.''.$last_name;
$full_name="$first_name$last_name";
一重引用符文字列と二重引用符文字列は、PHP では異なる方法で処理されます。二重引用符で囲まれた文字列の内容は解釈および置換できますが、一重引用符で囲まれた
は解釈および置換できます。文字列の内容は常に通常の文字とみなされます。例:
$foo=2;
echo "fois$foo";//結果を出力: foois2
echo'fois$foo';//出力結果: foois$foo
echo "fois$foon";//出力結果: foois2 (同時に改行)
echo'fois$foon';//出力結果: foois$foon
ご覧のとおり、一重引用符で囲まれた文字列ではバックスラッシュも拡張された意味を失います (バックスラッシュ \ の挿入と単一の
の挿入を除く)引用符')。したがって、変数置換を実行し、文字列に n (改行文字) などのエスケープ シーケンスを含める場合は、二重引用符
を使用する必要があります。番号。一重引用符文字列は他の場所でも使用できます。PHP パーサーは
に敏感であるため、スクリプト内で一重引用符文字列を使用すると処理速度が速くなります。一重引用符文字列の処理方法は比較的簡単ですが、二重引用符文字列の処理は内部で文字列を解析する必要があるためより複雑であるため、処理速度が速くなります
少し遅くなります。
文字列内の変数の複雑な組み合わせを参照する場合、いくつかの問題が発生する可能性があります。次のコードは正常に機能します。
エコー "value=$foo";エコー "value=$a[$i]";
次のコードでは、必要な結果が得られません:
echo "value=$a[$i][$j]";//二次元配列 $a の要素を出力したいとします。
文字列を使用する際のこれらの潜在的な問題を回避するために、通常は次のように複雑な変数を文字列から分離します。
echo'value='.$a[$i][$j];
もう 1 つの方法は、複雑な変数を中括弧で囲んで、パーサーがそれらを正しく識別できるようにすることです。
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*fromuserswherelast_name='オキーフ'
SQL ステートメントの英語の所有文字 (アポストロフィ) はバックスラッシュでエスケープする必要があることに注意してください。 PHP はこれを処理するための関数をいくつか提供しています
の場合、関数 AddSlashes($str) の目的は、文字列内の引用文字にバックスラッシュ エスケープ文字を自動的に挿入することです:
$last_name="オキーフ";
$sql="select*fromuserswherelast_name='".addslashes($last_name)."'";
この例では、二重
が使用されているため、last_name 文字列を一重引用符で囲む必要もあります (SQL 構文で必須)。
引用符文字列なので、この一重引用符のペアにエスケープを使用する必要はありません。次のステートメントは、一重引用符文字列を使用するのと同じです:$sql='select*fromuserswherelast_name=''.addslashes($last_name).''';
データベースに文字列を書き込むときは常に、内部の引用符が適切にエスケープされていることを確認する必要があり、これには PHP で多大な労力がかかります
初心者が陥りやすい間違い。
4. 二重引用符と HTML
SQL ステートメントとは異なり、標準 HTML 言語で文字列を表すために二重引用符がよく使用されます (多くのブラウザーには強力なフォールト トレランス機能が搭載されています
はい、HTML では文字列を表すために一重引用符を使用することも、引用符なしでさえも使用できます。例:
$html='
$html="
HTML 言語はバックスラッシュのエスケープをサポートしていません。これは、フォームの非表示の入力を使用してデータを送信するときに発生します
わかりました。 hiddeninputs の値を設定する最良の方法は、htmlspecialchars() 関数を使用してエンコードすることです。次の文は
になります。
二重引用符が含まれる可能性のあるデータを通常に送信するには:
一、引号定义字符串。要达到包含引号的目的,必须分析器在遇到串内普通引号的时候忽略它的原意,我们在引号的前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对单引号串的处理方式比较单纯,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速度略慢。
这个...双引号转义,单引号不转义
如:/r/n是换行,但是如果你用单引号写入文件,不会是换行,而是一个字符,如果用双引号写入文件,就是换行.
同意。
?