亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
preg_quote()實(shí)際做什麼
開發(fā)人員被絆倒的地方
1。雙重逃避後斜線
2。在模式的中間使用preg_quote()
3。忘記定界符
當(dāng)使用preg_quote()
避免後斜線地獄的實(shí)用技巧
首頁(yè) 後端開發(fā) php教程 導(dǎo)航後衛(wèi)地獄:深入研究`preg_quote()`and Regex逃脫

導(dǎo)航後衛(wèi)地獄:深入研究`preg_quote()`and Regex逃脫

Jul 26, 2025 am 09:51 AM
PHP Escape Characters

preg_quote()逃脫了正則特殊字符,包括後斜切和定界符,將它們視為文字; 2。通過傳遞原始字符串(例如'c:\ path')而沒有預(yù)淘汰的後斜線來避免雙重掃描; 3。在可能的情況下,在路徑中使用前向斜線以減少後拔雜亂的混亂; 4。始終將正則定界符作為preg_quote()的第二個(gè)參數(shù),以確保其正確逃脫; 5。僅將preg_quote()應(yīng)用於模式的動(dòng)態(tài)或用戶提供的部分,而不將整個(gè)正則表達(dá)式應(yīng)用; 6。切勿在包含有意的metacharacter的完整圖案上使用preg_quote(),例如 ^或。 *; 7。通過使用var_dump()輸出最終模式來驗(yàn)證正確性來調(diào)試。 preg_quote()是一種可以安全地將字符串嵌入到正則的工具,而不是逃脫整個(gè)模式,並且當(dāng)在文字和正則邏輯之間的邊界之間存在界限時(shí),它的正確使用會(huì)防止後斜線混淆。

導(dǎo)航後衛(wèi)地獄:深入研究`preg_quote()`and Regex逃脫

對(duì)於許多開發(fā)人員來說,在PHP Regex中處理後斜線是一段儀式。您寫一個(gè)圖案,測(cè)試它,突然間您淹沒在\\ , \\\\ ,或更糟糕的是 - 您的正則有時(shí)會(huì)起作用,並且神秘地失敗了。這不僅令人困惑,而且是後衛(wèi)地獄。雖然通常將preg_quote()作為解決方案呈現(xiàn),但使用它正確地需要了解它實(shí)際上的工作以及它沒有的方法。

導(dǎo)航後衛(wèi)地獄:深入研究`preg_quote()`and Regex逃脫

讓我們減少噪音。


preg_quote()實(shí)際做什麼

preg_quote()是一個(gè)簡(jiǎn)單但通常被誤解的功能。它的工作很簡(jiǎn)單:

導(dǎo)航後衛(wèi)地獄:深入研究`preg_quote()`and Regex逃脫

它逃脫了在正則模式中具有特殊含義的字符,因此將其視為字面角色。

這是它逃脫的字符列表(在PCRE的上下文中):

導(dǎo)航後衛(wèi)地獄:深入研究`preg_quote()`and Regex逃脫

``。 ^\ $ |()[] {}*? /

是的 - 它也逃脫了後斜線本身,因?yàn)樵谡齽t``\''是逃生角色。

因此,如果您致電:
````PHP
preg_quote('c:\ path \ to \ file.txt','/');

你得到:

 c:\\ path \\ to \\ file \ .txt

注意:

  • 每個(gè)\變?yōu)?code>\\ (因?yàn)锽ackSlash在Regex中很特別)
  • .變成\. (因?yàn)?code>.

第二個(gè)參數(shù)是定界符-Commonly / , #~ 。 preg_quote()確保如果定界符出現(xiàn)在字符串中,也可以逃脫。

例如:

 preg_quote('find/home/用戶','/');

返回:

查找\/home \/用戶

因此,當(dāng)您將文字字符串注入正則弦模式時(shí)preg_quote()至關(guān)重要。


開發(fā)人員被絆倒的地方

混亂通常開始時(shí),當(dāng)文件路徑,URL或用戶輸入輸入正則世界時(shí)。

1。雙重逃避後斜線

您可以嘗試通過預(yù)淘汰後斜切來“幫助” PHP:

 $ path ='c:\\ path \\ to \\ file.txt';
preg_quote($ path,'/');

現(xiàn)在,您正在餵食preg_quote()一個(gè)已經(jīng)逃脫後斜線的字符串。結(jié)果? C:\\\\path\\\\to\\\\file\\.txt這可能不是您想要的。

?修復(fù):傳遞原始字符串:

 $ path ='c:\ path \ to \ file.txt'; //單個(gè)後擋
preg_quote($ path,'/');

或者更好,請(qǐng)使用前向斜線(在大多數(shù)PHP上下文中在Windows上完全有效):

 $ path ='c:/path/to/file.txt';

現(xiàn)在, preg_quote()除非您的定界符為/ ,否則不會(huì)觸摸斜杠,在這種情況下,只有/被逃脫。

2。在模式的中間使用preg_quote()

您並不總是想引用整個(gè)模式 - 只是其中的一部分。

示例:您想匹配基本路徑,然後是任何文件名。

 $ basepath ='c:\ users \ john';
$模式='/^'。 preg_quote($ basepath,'/')。 '\\\\。 *\\。 txt $/';

這構(gòu)建:

 /^c:\ \ users \ john \ \ \ \ \ \ \ txt$/

?正確:僅引用動(dòng)態(tài)部分。將正則錨點(diǎn)( ^ , $ )和自定義邏輯( .*\.txt )手動(dòng)添加。

3。忘記定界符

如果您忘記將定界符傳遞給preg_quote() ,它不會(huì)逃脫:

 preg_quote('find /home /user'); //定界符默認(rèn)為null

返回: Find /home/user - /逃脫。

但是,如果您以後使用/用作正則分界符:

 '/^'。 preg_quote('find /home /用戶')。 '$/'

您會(huì)得到: /^Find /home/user$/ - 由於uneScaped / the the ture。

?始終將您的正則定界符傳遞給preg_quote()

 preg_quote('find/home/用戶','/')

當(dāng)使用preg_quote()

preg_quote()用於字面字符串。如果您要使用有意的Metacharacters構(gòu)建完整的正則圖案,請(qǐng)不要將整個(gè)內(nèi)容包裹在preg_quote()中。

?錯(cuò)誤:

 preg_quote('^Hello。*world $','/');

現(xiàn)在,您要匹配字面字符串^Hello.*world$ ,不使用正則邏輯。

?右:僅引用應(yīng)該是字面意思的部分:

 $ prefix ='Hello(World)';
$模式='/^'。 preg_quote($ prefix,'/')。 '。 *$/';

避免後斜線地獄的實(shí)用技巧

  • 盡可能在路徑中使用前向斜線。 PHP在窗戶上可以很好地處理它們。
  • 始終將定界符傳遞preg_quote() 。
  • 切勿在輸入字符串中預(yù)淘汰後斜切。
  • 僅引用用戶提供或動(dòng)態(tài)字符串,而不是整個(gè)模式。
  • 使用var_dump()echo在使用之前檢查最終模式。

示例調(diào)試:

 $ term ='example.com(v1)';
$模式='/^'。 preg_quote($ term,'/')。 '\ .exe $/';
var_dump($模式); //檢查您實(shí)際匹配的內(nèi)容

後斜線不是不可避免的。通常是您要混合原始字符串,逃脫的字符串和正則邏輯,而沒有明確的邊界。 preg_quote()不是魔術(shù),但是正確使用的是您需要的救生筏。

請(qǐng)記?。阂梦淖?,而不是邏輯。也許切換到前斜線。您的理智會(huì)感謝您。

以上是導(dǎo)航後衛(wèi)地獄:深入研究`preg_quote()`and Regex逃脫的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

導(dǎo)航後衛(wèi)地獄:深入研究`preg_quote()`and Regex逃脫 導(dǎo)航後衛(wèi)地獄:深入研究`preg_quote()`and Regex逃脫 Jul 26, 2025 am 09:51 AM

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

PHP的Heredoc和Nowdoc語法中的逃生角色行為 PHP的Heredoc和Nowdoc語法中的逃生角色行為 Jul 26, 2025 am 09:45 AM

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

現(xiàn)代php逃脫的模式,用於安全和乾淨(jìng)的代碼 現(xiàn)代php逃脫的模式,用於安全和乾淨(jìng)的代碼 Jul 26, 2025 am 09:51 AM

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

單與雙引號(hào):逃脫角色行為的權(quán)威指南 單與雙引號(hào):逃脫角色行為的權(quán)威指南 Jul 28, 2025 am 04:44 AM

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

後斜線的藝術(shù):在PHP正則表達(dá)式中揭開逃生角色的神秘面紗 後斜線的藝術(shù):在PHP正則表達(dá)式中揭開逃生角色的神秘面紗 Jul 27, 2025 am 03:18 AM

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

比較分析:'addslashes()`vs.htmlspecialchars() 比較分析:'addslashes()`vs.htmlspecialchars() Jul 27, 2025 am 04:27 AM

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(

超越' addslashes()” 超越' addslashes()” Jul 26, 2025 am 02:55 AM

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

逃脫者:在PHP字符串和路徑中處理字面的後斜線 逃脫者:在PHP字符串和路徑中處理字面的後斜線 Jul 26, 2025 am 09:35 AM

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

See all articles