雙引號解釋逃生和變量,單語引號使事物保持字面上的狀態(tài);使用雙引號的字符串與變量和逃脫序列(如\ n或$),使用單引號的原始文本避免意外解析,將Heredoc應(yīng)用於多行插值字符串和NOWDOC中,將其適用於多行文字,並始終在文件路徑或使用Directory Directory_separator中,將Heredoc應(yīng)用於多行的插入式字符串,並始終逃脫backssslash。
在使用PHP中的字符串文字時(shí),了解逃生序列是必不可少的,尤其是在處理動態(tài)內(nèi)容,文件路徑或輸出格式時(shí)。雖然PHP的逃生處理起初似乎很簡單,但即使是經(jīng)驗(yàn)豐富的開發(fā)人員,單引號和雙引號之間的細(xì)微差異也可能會絆倒。

雙引號的字符串:逃脫的事情很重要
在PHP中,雙引號的字符串解釋了逃生序列。這意味著從後斜線( \
)開始的某些字符組合被處理並用特殊值替換。
雙重引用字符串中的共同逃生序列包括:

-
\"
- 插入字面的雙報(bào)價(jià) -
\$
- 防止可變插值(如果您需要字面$
則有用) -
\\
- 插入一個後斜線 -
\n
- newline -
\r
- 馬車返回 -
\t
- 選項(xiàng)卡 -
\v
- 垂直選項(xiàng)卡 -
\e
- 逃脫角色(ASCII 27) -
\0
至\377
- 八進(jìn)製字符代碼 -
\x00
至\xFF
- 十六進(jìn)製字符代碼 -
\u{0000}
到\u{10FFFF}
- Unicode Codepoints(如果啟用)
例如:
echo“ hello \ tworld \ n”; //輸出:你好世界 //(在新線路上)
這種行為使雙引號的字符串強(qiáng)大用於格式化,但也意味著當(dāng)您不想解釋時(shí),您必須小心 - 例如在編寫Windows文件路徑或正則表達(dá)式時(shí)。

單引號:最小逃脫
單引號的字符串更為字面。大多數(shù)逃生序列被忽略。唯一的兩個例外是:
-
\\
- 成為字面的後衛(wèi) \'
- 成為字面的單語言
其他一切都被視為純文本:
迴聲'Hello \ nworld'; //輸出:Hello \ nworld
沒有插入新線。當(dāng)您想避免解析意想不到的解釋或表現(xiàn)開銷時(shí),這使單引號的字符串理想。
因此,如果您要嵌入包含許多$
或\
的HTML或JavaScript,則單句話有助於避免後拔碎屑。
Heredoc和Nowdoc:擴(kuò)展字符串靈活性
對於多行字符串,PHP提供heredoc
和nowdoc
。
- Heredoc的行為像雙引號的字符串(處理變量和逃生)。
- NowDoc的行為就像單引號的字符串(無解釋)。
例子:
$ name =“ Alice”; echo <<< eot 你好$ name \ n 你好嗎? eot; //輸出:你好愛麗絲\ n // 你好嗎?
等待 - notice \n
沒有成為新線?這是因?yàn)槟J(rèn)情況下,Heredoc確實(shí)解析了逃脫序列,但前提是它們有效。在這種情況下, \n
是有效的,但取決於上下文(例如,是否在數(shù)字之後),它可能會也可能不會被解釋。為了確保真正的新線,請使用實(shí)際的線斷路或PHP_EOL
。
更好的示例與Newline:
echo <<< eot 你好$ name 你好嗎? eot;
NowDoc完全避免了這種情況:
echo <<<'eot' 你好$ name \ n 這裡沒有變量或逃脫。 eot;
這完全按書面輸出字符串。
實(shí)用技巧和常見的陷阱
- 當(dāng)您不需要變量或逃脫時(shí),請使用單個引號- 它的速度稍快又清潔。
- 如果您想要一個字面的美元標(biāo)誌,
$
逃脫雙引號的字符串:"The cost is \$10"
-
當(dāng)心八分之一的混亂:
"\40"
是一個空間(八十40),但"\8"
或"\9"
變成"8"
或"9"
因?yàn)?和9不是有效的八倍數(shù)字。 PHP默默降低了無效的八進(jìn)序。 - Unicode Escapes在某些情況下(例如
preg
函數(shù))需要u
標(biāo)誌,但是在字符串中,如果啟用了Unicode支持\u{...}
僅在雙引號或Heredoc中起作用(默認(rèn)為現(xiàn)代PHP)。 -
文件路徑中的後斜線:在Windows上,在雙引號的字符串中使用前向斜線
/
或雙重斜線\\
?;蛘吒?- 使用DIRECTORY_SEPARATOR
或realpath()
避免問題。
基本上,請記?。?br>雙引號→解釋逃逸和變量。
單引號→幾乎所有內(nèi)容都是字面上的。
它並不復(fù)雜,但是弄錯了會導(dǎo)致難以發(fā)現(xiàn)的錯誤 - 例如HTML屬性中缺少引號或損壞的JSON輸出。
因此,明智地選擇您的報(bào)價(jià)。
以上是掌握字符串文字:PHP逃脫序列的細(xì)微差別的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

preg_quote()escapesregex-specialcharacters,includingbackslashesandthedelimiter,totreatthemasliterals;2.avoiddouble-escapingbypassingrawstrings(e.g.,'C:\path')withoutpre-escapedbackslashes;3.useforwardslashesinpathswhenpossibletoreducebackslashclutter

Heredoc處理變量插值和基本轉(zhuǎn)義序列如\n、\t、\\、\$,但不處理\"或\',而Nowdoc不進(jìn)行變量插值和任何轉(zhuǎn)義處理,所有內(nèi)容包括\n和變量均按字面輸出;1.Heredoc中變量如$name會被替換,\\n被解析為換行;2.Nowdoc中$name和\n均保持原樣;3.兩者都不需要轉(zhuǎn)義引號;4.結(jié)束標(biāo)識符必須獨(dú)占一行且無前導(dǎo)空格,PHP7.3 允許使用空格縮進(jìn)結(jié)束標(biāo)識符。因此Heredoc適用於需格式化的多行字符串,Nowdoc適合輸出原始內(nèi)容如SQL或JavaScript

inbash,單quotestareatallacharacterslitellywhiledbouldequotesallaibal -expansionandlimitedescaping; inpythonandjavascript,bothequotetypespeshandleescapestamisame,witheChoIceMainallyablectringingingablectringingablectingabilitingabilitingabilityabilityance and Concencenience and conconvenienceWhenembednembeddingdingdingdingdingdingdingdingdingdingdoquote,souseseSingLelequote

始終escapeOutputingContext-SpecificMethods:htmlspecialchars()forhtmlContentAntAttributes,rawurlencode()forurls,andjson_en code()withjson_hex_tag,json_hex_apos,json_hex_quot,andjson_unescaped_unicodeodeforjavascript.2.usetemplatingenginesliketwig,lara

TomasterbackslashesinPHPregex,understandthattwolayersofparsingoccur:PHPprocessesescapesequencesfirst,thentheregexenginedoes;2.UsesinglequotesforregexpatternstoavoidPHPinterpretingescapeslike\basbackspace;3.Indoublequotes,doublethebackslashes(e.g.,&qu

addslashes()應(yīng)避免用於SQL轉(zhuǎn)義,因?yàn)樗话踩也环繱QL注入;htmlspecialchars()用於HTML輸出以防止XSS攻擊;mysqli_real_escape_string()可用於MySQL查詢中的字符串轉(zhuǎn)義,但僅在無法使用預(yù)處理語句時(shí)作為次優(yōu)選擇。 1.addslashes()是過時(shí)且不安全的,不應(yīng)在現(xiàn)代應(yīng)用中用於SQL轉(zhuǎn)義;2.htmlspecialchars()應(yīng)在將用戶輸入輸出到HTML時(shí)使用,以防止XSS;3.mysqli_real_escape_string(

SQL注入防護(hù)不能依賴addslashes(),因其不處理多字節(jié)編碼且僅轉(zhuǎn)義有限字符,易被繞過;應(yīng)使用預(yù)處理語句(如PDO或MySQLi的參數(shù)化查詢)將數(shù)據(jù)與SQL邏輯分離,確保輸入不被解析為代碼;若無法使用預(yù)處理,需根據(jù)上下文采用數(shù)據(jù)庫特定的轉(zhuǎn)義函數(shù)(如real_escape_string並設(shè)置正確字符集)、標(biāo)識符白名單或引號包裹、整型輸入強(qiáng)制類型轉(zhuǎn)換等方法,實(shí)現(xiàn)分層防禦。

sotofixthis:1.sissinglequotequotesforliteralathslike'c:\ users \ users \ john \ documents',2.DoublethebackSlashEsIndBookSindoublequotquoteSess'c:c:c:c:
