プログラミング言語では、一重引用符であろうと二重引用符であろうと、それらはすべて非常に重要な役割を果たしており、同じことがPHP言語にも当てはまります。 ASPに比べてPHPの引用符は使いやすい シングルクォーテーションとダブルクォーテーションの違いを紹介します。
1. 引用符は文字列を定義します。
引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその元の意味を無視する必要があります。これは、この引用符が文字列の一部であることを PHP に伝えるために、引用符の前にバックスラッシュを追加します。正しい表現方法は次のとおりです。単一引用符文字列をより関連性の高い場所で使用すると、PHP 構文パーサーが単一引用符文字列をより速く処理できるようになります。比較的単純ですが、二重引用符の処理は文字列内で解析する必要があるためより複雑になり、処理速度が若干遅くなります。
二重引用符はエスケープされますが、一重引用符はエスケープされません。 PHP では、文字列は通常、次のように引用符のペアで定義されます。
<ol class="dp-c"> <li class="alt"><span><span class="string">'I am a string in single quotes'</span><span> </span></span></li> <li> <span class="string">"I am a string in double quotes"</span><span> </span> </li> </ol>
PHP 構文パーサーは、文字列を判断するために引用符のペアを使用します。したがって、すべての文字列で同じ一重引用符または二重引用符を使用して開始と終了を定義する必要があります。たとえば、次の文字列定義は不正です:
<ol class="dp-c"> <li class="alt"><span><span>"I am not a valid string since I have unmatching quote marks' </span></span></li> <li><span>'Me neither!" </span></li> </ol>
文字列を定義する場合、区切り文字として考慮される引用符は 1 種類だけです。つまり、一重引用符または二重引用符です。したがって、文字列が二重引用符で始まる場合は、二重引用符のみがパーサーによって解析されます。こうすることで、二重引用符で囲まれた文字列に、単一引用符も含め、関連性の高い文字を含めることができます。次の引用符文字列はすべて有効です:
<ol class="dp-c"> <li class="alt"><span><span class="vars">$s</span><span> = </span><span class="string">"I am a 'single quote string' inside a double quote string"</span><span>; </span></span></li> <li> <span class="vars">$s</span><span> = </span><span class="string">'I am a "double quote string" inside a single quote string'</span><span>; </span> </li> </ol>
PHP は文字列の先頭に対応する引用符を見つけると、文字列の終わりに達したと判断します。そのため、次のようになります。
は実際に使用されます PHP 構文パーサーは 3 つの部分に分かれています: 「なぜ " - 一重引用符を含む二重引用符の文字列 this - パーサーが処理できない余分な文字 " - 通常文字列 上記の CASE は、二重引用符文字列に二重引用符を含めようとし、パーサーは 2 番目の二重引用符に遭遇したときに文字列が終了するとみなします。引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその元の意味を無視する必要があります。これは、この引用符が文字列の一部であることを PHP に伝えるために、引用符の前にバックスラッシュを追加する必要があります。式 メソッドは次のとおりです:<ol class="dp-c"><li class="alt"><span><span class="string">"Why doesn't "</span><span>this</span><span class="string">" work?"</span><span> </span></span></li></ol>
<ol class="dp-c"><li class="alt"><span><span class="string">"Why doesn't "that" work?"</span><span> </span></span></li></ol>
<ol class="dp-c"><li class="alt"><span><span class="string">'You'd better escape your apostrophes'</span><span> </span></span></li></ol>
2. 文字列リンク
文字列は、次のように文字列リンカー (.) を使用してリンクできます。一般的な使用法は、HTML 文字列ソース コードの大きなブロックを作成し、値 (= ) リンク シンボル (.) は、次のように短縮して (.=) シンボルに結合できます:<ol class="dp-c"><li class="alt"><span><span class="vars">$file</span><span> = </span><span class="string">"c:windowssystem.ini"</span><span>; </span></span></li><li><span class="func">echo</span><span> </span><span class="vars">$file</span><span>; </span><span class="comment">// 打印结果为: c:windowssystem.ini </span><span> </span></li><li class="alt"><span class="vars">$file</span><span> = </span><span class="string">"c:\windows\system.ini"</span><span>; </span></li><li><span class="func">echo</span><span> </span><span class="vars">$file</span><span>; </span><span class="comment">// 打印结果为: c:windowssystem.ini </span><span> </span></li></ol>
3. 文字列内の変数を使用します
この機能を使用すると、多数の単純なリンク シンボルを接着できます。文字列。 PHP では、二重引用符で囲まれた文字列に文字列変数を直接含めることができます。次の 2 つの文字列の処理結果が同じであることがわかります。<ol class="dp-c"><li class="alt"><span><span class="vars">$first_name</span><span> = </span><span class="string">'Charlie'</span><span>; </span></span></li><li><span class="vars">$last_name</span><span> = </span><span class="string">'Brown'</span><span>; </span></li><li class="alt"><span class="vars">$full_name</span><span> = </span><span class="vars">$first_name</span><span> . </span><span class="string">' '</span><span> . </span><span class="vars">$last_name</span><span>; </span></li></ol>
<ol class="dp-c"><li class="alt"><span><span class="vars">$html</span><span> = </span><span class="string">'<table>'<span>; </span><li> <span class="vars">$html</span><span> .= </span><span class="string">'<tr><td>number</td><td>square</td></tr>'</span><span>; </span> </li> <li class="alt"> <span class="keyword">for</span><span> ( </span><span class="vars">$i</span><span>=0 ; </span><span class="vars">$i</span><span><10 ; </span><span class="vars">$i</span><span>++) { </span> </li> <li> <span class="vars">$square</span><span> = </span><span class="vars">$i</span><span> * </span><span class="vars">$i</span><span>; </span> </li> <li class="alt"> <span class="vars">$html</span><span> .= </span><span class="string">'<tr><td>'</span><span> . </span><span class="vars">$i</span><span> . </span><span class="string">'</td><td>'</span><span> . </span><span class="vars">$square</span><span> . </span><span class="string">'</td></tr>'</span><span>; </span> </li> <li><span>} </span></li> <li class="alt"> <span class="vars">$html</span><span> .= </span><span class="string">'</table>'</span><span>; </span> </li> <p></p> ご覧のとおり、バックスラッシュであっても、一重引用符文字列では拡張された意味が失われます (バックスラッシュの追加と一重引用符 ' の追加を除く)。したがって、変数置換を実行し、文字列に n (改行) などのエスケープ シーケンスを含める場合は、二重引用符を使用する必要があります。 <p></p>一重引用符文字列は、より関連した場所で使用できます。スクリプト (バッチ ファイル) で一重引用符文字列を使用すると、読み取り速度が向上します。一重引用符文字列に対する PHP 構文パーサーの処理方法は比較的単純であることに注意してください。二重引用符の処理は文字列内で解析する必要があるため、より複雑になるため、処理速度が若干遅くなります。 <p></p>文字列内の変数の複雑な組み合わせを参照する場合、いくつかの問題が発生する可能性があります。次のソース コードは正常に動作します: <p></p> <p></p> <pre class="brush:php;toolbar:false"><ol class="dp-c"> <li class="alt"><span><span class="vars">$full_name</span><span> = </span><span class="vars">$first_name</span><span> . </span><span class="string">' '</span><span> . </span><span class="vars">$last_name</span><span>; </span></span></li> <li> <span class="vars">$full_name</span><span> = </span><span class="string">"$first_name $last_name"</span><span>; </span> </li> </ol>
<ol class="dp-c"> <li class="alt"><span><span class="vars">$foo</span><span> = 2; </span></span></li> <li> <span class="func">echo</span><span> </span><span class="string">"foo is $foo"</span><span>; </span><span class="comment">// 打印结果: foo is 2 </span><span> </span> </li> <li class="alt"> <span class="func">echo</span><span> </span><span class="string">'foo is $foo'</span><span>; </span><span class="comment">// 打印结果: foo is $foo </span><span> </span> </li> <li> <span class="func">echo</span><span> </span><span class="string">"foo is $foon"</span><span>; </span><span class="comment">// 打印结果: foo is 2 (同时换行) </span><span> </span> </li> <li class="alt"> <span class="func">echo</span><span> </span><span class="string">'foo is $foon'</span><span>; </span><span class="comment">// 打印结果: foo is $foon </span><span> </span> </li> </ol>
文字列を使用する際のこれらの潜在的な問題を回避するために、通常は次のように複雑な変数を文字列から分離します:
<ol class="dp-c"> <li class="alt"><span><span class="func">echo</span><span> </span><span class="string">"value = $foo"</span><span>; </span></span></li> <li> <span class="func">echo</span><span> </span><span class="string">"value = $a[$i]"</span><span>; </span> </li> </ol>
りー
这样,又出现新问题了。当我们想在字串中引用花括号字符本身时,就要记得使用转义符了:
<ol class="dp-c"> <li class="alt"><span><span class="vars">$var</span><span> = 3; </span></span></li> <li> <span class="func">echo</span><span> </span><span class="string">"value = {$var}"</span><span>; </span><span class="comment">// 打印结果 "value = 3" </span><span> </span> </li> <li class="alt"> <span class="func">echo</span><span> </span><span class="string">"value = {$var}"</span><span>; </span><span class="comment">// 打印结果 "value = {3}" </span><span> </span> </li> </ol>
三、斜杠和SQL语句
生成HTML源代码或SQL查询语句是编写PHP程序时经常遇到而且是件有趣的问题。为什么这么说呢,应该这涉及到生成另外一种类型的源代码,你必须仔细地考虑和遵循这种源代码所要求的编写语法和规则。
我们来看这样一个CASE,假如你想查询数据库中名字是“O'Keefe”的用户,通常SQL语句的形式是这样的:
<ol class="dp-xml"><li class="alt"><span><span>select * from users where </span><span class="attribute">last_name</span><span> = 'O'</span><span class="attribute-value">Keefe</span><span>' </span></span></li></ol>
请说明SQL语句这个英语所有格(撇号)需使用反斜杠转义。PHP专门给予了一些函数来处理这样的情况,函数AddSlashes($str)的用途根本就是电子在字串中对引号字符添入反斜杠转义符:
<ol class="dp-c"> <li class="alt"><span><span class="vars">$last_name</span><span> = </span><span class="string">"O'Keefe"</span><span>; </span></span></li> <li> <span class="vars">$sql</span><span> = </span><span class="string">"select * from users where last_name = '"</span><span> . </span><span class="func">addslashes</span><span>(</span><span class="vars">$last_name</span><span>) . </span><span class="string">"'"</span><span>; </span> </li> </ol>
在这个CASE中,你还要在last_name字串外面括上单引号(SQL语法要求),由于那里使用的是双引号串,所以对这对单引号就无须使用转义了。下面的这个语句是使用单引号串的等价形式:
<ol class="dp-c"><li class="alt"><span><span class="vars">$sql</span><span> = </span><span class="string">'select * from users where last_name = ''</span><span> . </span><span class="func">addslashes</span><span>(</span><span class="vars">$last_name</span><span>) . </span><span class="string">'''</span><span>; </span></span></li></ol>
任何时候你要在数据库中写入字串,你都必须确保里面的引号正确使用了转义符号,这是很多PHP初学者常犯的错误。
四、双引号和HTML
与SQL语句不相同,在标准HTML语言中双引号常被用来表达字串(现在很多浏览器具备较强的容错功能,允许在HTML中用单引号甚至不用引号表达字符串),例如:
<ol class="dp-c"> <li class="alt"><span><span class="vars">$html</span><span> = </span><span class="string">'<a href="'</span><span>.</span><span class="vars">$url</span><span>.</span><span class="string">'">'</span><span>.</span><span class="vars">$link</span><span>.</span><span class="string">'</a>'</span><span>; </span></span></li> <li> <span class="vars">$html</span><span> = </span><span class="string">"<a href="$url">$link</a>"</span><span>; </span> </li> </ol>
HTML语言不支持反斜杠转义,这一点在我们使用列表单的hidden inputs来传输数据的时候就会有所体会了。设置hidden inputs的值的最好办法,是使用htmlspecialchars()函数来编码。下面的语句可以正常传输一个可能包含双引号的数据:
<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">hidden</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">var</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"<?php echo htmlspecialchars($var) ?>"</span><span class="tag">></span><span> </span></span></li></ol>
通过本文的介绍,希望对你有帮助。