ホームページ >php教程 >php手册 >Web サイト開発およびプログラミングにおける特殊記号処理

Web サイト開発およびプログラミングにおける特殊記号処理

WBOY
WBOYオリジナル
2016-06-21 08:57:011260ブラウズ

PHP パーサーは、引用符のペアを使用して文字列を判断します。したがって、すべての文字列は同じ単一または二重を使用する必要があります。 開始と終了を定義する引用符。たとえば、次の文字列定義は無効です:

1 PHP における単一引用符と二重引用符の違い

PHP では、文字列は通常、
のように引用符のペア内で定義されます。
「私は一重引用符で囲まれた文字列です」
「私は二重引用符で囲まれた文字列です」

PHP パーサーは、引用符のペアを使用して文字列を決定します。したがって、すべての文字列は同じ単一または二重
を使用する必要があります。 開始と終了を定義する引用符。たとえば、次の文字列定義は無効です:

「一致しない引用符があるため、有効な文字列ではありません」
「私も違います!」

文字列を定義する場合、区切り文字として考慮される引用符は一重引用符または二重引用符の 1 種類だけです。したがって、文字列が二重引用符で表されている場合
の場合、二重引用符のみがパーサーによって解析されます。このようにして、二重引用符で囲まれた文字列内に他の文字 (一重引用符で囲まれた
であっても) を含めることができます。 番号。次の引用符文字列は有効です:

$s = "私は二重引用符文字列内の「単一引用符文字列」です"; $s = '私は一重引用符文字列内の「二重引用符文字列」です';
PHP は、文字列の先頭に対応する引用符を見つけると、それが文字列の末尾に達したと判断し、次のようにします。
「なぜ「これ」は機能しないのですか?

実際には、PHP パーサーによって 3 つの部分に分割されます。

"Why doesn'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 .= '

' . $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
;
ご覧のとおり、一重引用符で囲まれた文字列内のバックスラッシュでさえ、その拡張された意味を失います (バックスラッシュ \ の挿入と単一の
の挿入を除く)
2 PHP における単一引用符と二重引用符の違い


引用符')。したがって、変数置換を実行し、文字列に n (改行文字) などのエスケープ シーケンスを含める場合は、二重引用符
を使用する必要があります。 番号。 PHP パーサーは
に敏感であるため、単一引用符文字列は他の場所でも使用できます。 シングルクォート文字列の処理方法は比較的単純ですが、ダブルクォーテーション文字列の処理は文字列内での解析も必要となるためより複雑であり、処理速度は
となります。 若干遅いです。

文字列内の変数の複雑な組み合わせを参照する場合、いくつかの問題が発生する可能性があります。次のコードは正常に動作します。
エコー "値 = $foo"; エコー "値 = $a[$i]";
しかし、次のコードでは必要な結果を得ることができません:

echo "value = $a[$i][$j]"; //2 次元配列 $a の要素を出力したい。

文字列を使用するときにこれらの潜在的な問題を回避するために、通常は次のように複雑な変数を文字列から分離します:

echo '値 = ' . $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 * from users where 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 = ''.$link.''; $html = "$link";
HTML 言語はバックスラッシュ エスケープをサポートしていません。これは、フォームの非表示の入力を使用してデータを送信するときに発生します。非表示の入力の値を設定する最良の方法は、htmlspecialchars() 関数を使用してエンコードすることです。通常、次のステートメントは二重引用符を含む可能性のあるデータを送信できます:



1. 引用符は文字列を定義します。引用符を含めるという目的を達成するには、文字列内で通常の引用符が見つかった場合、パーサーはその元の意味を無視する必要があります。これは、この引用符が文字列の一部であり、引用符であることを PHP に伝えるためです。正しい表現は次のとおりです。一重引用符文字列は他の場所でも使用できます。PHP パーサーは一重引用符文字列を比較的単純な方法で処理するため、二重引用符文字列を使用すると処理速度が速くなります。引用符は文字列の内部的な性質によるもので、解析も必要となるため、より複雑になるため、処理速度が若干遅くなります。

これは... 二重引用符はエスケープされますが、一重引用符はエスケープされません
例: /r/n は改行ですが、一重引用符でファイルを作成すると、それは改行ではなく文字になります。二重引用符でファイルを作成すると、
になります。





声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。