二重引用符はエスケープと変數(shù)を解釈し、単一の引用は物事を文字通りに保ちます。変數(shù)を備えた動的なコンテンツにダブル引用文字列を使用し、\ nや$などのシングルクォートシーケンスを使用し、意図しない解析を避けるために生のテキストを使用し、マルチライン補(bǔ)間文字列にヘレドックを適用し、マルチラインリテラルにはNowdocを適用し、常にファイルパスでバックスラッシュを適切に逃がします。
PHPで文字列リテラルを使用する場合、特に動的コンテンツ、ファイルパス、または出力のフォーマットを扱う場合、エスケープシーケンスを理解することが不可欠です。 PHPの脫出の取り扱いは最初は簡単に思えるかもしれませんが、単一引用符と二重引用符で微妙な違いは、経験豊富な開発者でさえもつまずくことができます。

二重引用文字列:逃げることは問題です
PHPでは、二重引用文字列がエスケープシーケンスを解釈します。これは、バックスラッシュ( \
)から始まる特定の文字の組み合わせが処理され、特別な値に置き換えられることを意味します。
二重引用文字の一般的なエスケープシーケンスには次のものがあります。

-
\"
- 文字通りの二重引用を挿入します -
\$
- 可変補(bǔ)間を防ぎます(リテラル$
が必要な場合に便利です) -
\\
- 単一のバックスラッシュを挿入します -
\n
- Newline -
\r
- キャリッジリターン -
\t
- タブ -
\v
- 垂直タブ -
\e
- エスケープキャラクター(ASCII 27) -
\0
から\377
- オクタル文字コード -
\x00
から\xFF
- 16進(jìn)數(shù)文字コード -
\u{0000}
to\u{10FFFF}
- Unicode CodePoints(有効にする場合)
例えば:
echo "hello \ tworld \ n"; //出力:Hello World //(新しい行で)
この動作により、フォーマットのために二重引用文字列が強(qiáng)力になりますが、Windowsファイルのパスやregexパターンを書くときのように、解釈を望まない場合は注意する必要があります。

単一引用文字:最小限の脫出
一口引っ張りの文字列はより文字通りです。ほとんどのエスケープシーケンスは無視されます。唯一の2つの例外は次のとおりです。
-
\\
- 文字通りのバックスラッシュになります \'
- 文字通りの単一の引用になります
他のすべてはプレーンテキストとして扱われます:
echo 'hello \ nworld'; // outputs:hello \ nworld
Newlineは挿入されていません。これにより、意図しない解釈や解析からのパフォーマンスオーバーヘッドを避けたい場合に、単一引用符の文字列が理想的になります。
したがって、多くの$
または\
を含むHTMLまたはJavaScriptを埋め込んでいる場合、単一の引用符はバックスラッシュクラッターを避けるのに役立ちます。
HeredocとNowdoc:拡張文字列の柔軟性
マルチライン文字列の場合、PHPはheredoc
とnowdoc
提供します。
- Heredocは、二重引用文字のように動作します(変數(shù)とエスケープが処理されます)。
- Nowdocは、単一引用された文字列のように動作します(解釈なし)。
例:
$ name = "Alice"; echo <<< eot こんにちは$ name \ n 元?dú)荬扦工?eot; //出力:こんにちはアリス\ n // 元?dú)荬扦工?/pre>待ってください -
\n
新しいラインになりませんでしたか?これは、デフォルトでは、Heredocがシーケンスを解析するため、それらが有効な場合のみです。この場合、\n
有効ですが、コンテキスト(數(shù)字が続くかどうかなど)に応じて、解釈される場合とされない場合があります。実際の新しいラインを確保するには、実際のラインブレークまたはPHP_EOL
を使用します。明示的な新しいラインを備えたより良い例:
echo <<< eot こんにちは$ name 元?dú)荬扦工?eot;Nowdocはこれを完全に回避します:
echo <<< 'eot' こんにちは$ name \ n ここには変數(shù)や脫出はありません。 eot;これにより、文字列が書かれたとおりに出力されます。
実用的なヒントと一般的な落とし穴
- 変數(shù)やエスケープを必要としない場合は、単一の引用符を使用します。少し速くてきれいです。
- 文字通りのドルの看板が必要な場合は、ダブル引用文字で
$
逃がしてください:"The cost is \$10"
- 8と9が有効なオクタル桁ではないため、
"\40"
は空間( Octal 40)ですが、"\8"
または"\9"
"8"
または"9"
になります。 PHPは無効なオクタルシーケンスを靜かに落とします。 -
ユニコードエスケープでは、特定のコンテキスト(
preg
関數(shù)など)でu
フラグが必要ですが、文字列では、\u{...}
は、Unicodeサポートが有効になっている場合(最新のPHPでデフォルト)、ダブル引用またはHeredocでのみ動作します。 -
ファイルパスでのバックスラッシュ:Windowsで、ダブル引用文字でフォワードスラッシュ
/
または二重バックスラッシュ\\
使用します。または、問題を回避するために、DIRECTORY_SEPARATOR
またはrealpath()
を使用します。
基本的に、覚えておいてください:
二重引用符→エスケープと変數(shù)を解釈します。
単一の引用→ほとんどすべてが文字通りです。
複雑ではありませんが、間違っていると、HTML屬性や壊れたJSON出力に見積もりが欠落しているなど、見つけるのが難しいバグにつながります。
だからあなたの引用を賢く選んでください。
以上が文字列リテラルのマスタリング:PHPエスケープシーケンスのニュアンスの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

preg_quote()backslashesandthededelimiterを含むescapesregexスペシャルチャクター、totreatthemasliterals;

Heredocは、\ n、\ t、\\、\ $などの可変補(bǔ)間と基本的なエスケープシーケンスを処理しますが、\ "または\ 'を処理しません。 nowdocでは、エスケートの見積もりは必要ありません。

inbash、single quotestreatallcharactersliterlitivally whiledoublequoteSolowvarowvariaible expansionAndlimitedescaping; inpythonandjavascript、両方のQuotetypeshandleescapesthesame、ledicoicemainlycemainlectingivationability andconventyding bedingding beding beding beding、sousesinglequote

AlwayseScapeOutusingContext-SpecificMethods:htmlspecialchars()forhtmlcontentandattributes、rawurlencode()forurls、andjson_en code()withjson_hex_tag、json_hex_apos、json_hex_quot、andjson_unescaped_unicodeforjavascript.2.usetemplatingenginesliketwig、lara

tomasterbackslashesinphpregex、lutledentthattwolayersofparsingocur:phpprocessesesscapesequencesfirst、theregexenginedoes;

SQL脫出は安全ではなく、SQL注入から保護(hù)されていないため、SQLエスケープの場合はaddSlashes()を避ける必要があります。 HTMLSPECIALCHARS()は、XSS攻撃を防ぐためにHTML出力に使用されます。 mysqli_real_escape_string()は、mysqlクエリでの文字列エスケープに使用できますが、事前処理ステートメントを使用できない場合は、最適ではないオプションにすぎません。 1。AddSlashes()は時代遅れで安全ではなく、最新のアプリケーションでのSQLエスケープには使用しないでください。 2。HTMLSPECIALCHARS()は、XSSを防ぐためにユーザー入力とHTMLに出力するときに使用するときに使用する必要があります。 3。mysqli_real_escape_string(

SQLインジェクション保護(hù)は、Multi-Byteエンコードを処理せず、簡単にバイパスされる有限文字のみを逃れるため、AddSlashes()に依存することはできません。プリプロセシングステートメント(PDOまたはMySQLIのパラメーター化クエリなど)を使用して、データをSQLロジックから分離して、入力がコードに解析されないことを確認(rèn)する必要があります。プリプロセシングを使用できない場合は、データベース固有のエスケープ関數(shù)(Real_Escape_Stringや正しい文字セットの設(shè)定など)、識別子ホワイトリストまたは引用マークラッピング、整數(shù)入力キャスト、およびその他の方法をコンテキストに従って使用する必要があります。

backslashesgomissinginphpbecauseTheyareTreatedasescapecharactersIndouble-quotedstrings、sotofixthis:1.Usesinglequotesforl iteralpathslike'c:\ uses \ john \ documents '、2.ordoublethebackslashesindoublequotesas "c:\\ users \\\ john \\ documents"、3.prefer
