[英]How to escape backslashes to have safe strings ? php
自昨天以來,我一直陷入這個問題,我只是想了解如何正確地對字符串進行轉義,我沒有找到任何完整的答案。
這是我的問題=>
我有兩個文件:
replace.txt,這里是內容:
new_content'\\ 0020'
subject.txt,這里是內容:
結構old_content
這是我的代碼:
$myfile = fopen ( __DIR__ . '/replacement.txt', "r" ) or die ( "Unable to open file!" );
$replacement = fread ( $myfile, filesize ( __DIR__ . '/replacement.txt' ) );
fclose ( $myfile );
$myfile = fopen ( __DIR__ . '/subject.txt', "r" ) or die ( "Unable to open file!" );
$subject = fread ( $myfile, filesize ( __DIR__ . '/subject.txt' ) );
fclose ( $myfile );
$subject = preg_replace ( "%structure.*%s", $replacement, $subject, - 1, $count );
die ( $subject );
此代碼應打印: new_content '\\0020'
但它打印new_content new_content 'structure old_content20'
old_content20 new_content 'structure old_content20'
為什么? 因為有一個反斜杠沒有被逃脫。
這是我所做的,但是沒有運氣:(
我曾嘗試添加$replacement = addslashes($replacement);
在preg_replace
之前:但這是我得到的: new_content \\'\\0020\\'
,這是不正確的,因為在引號之前有一個反斜杠。
我曾試過將條帶斜杠的先前結果$subject = stripslashes ( $subject )
,但是這是我得到的: new_content '020'
,不正確!
只為我工作的事情,是編輯replacement.txt
這樣: new_content '\\\\0020'
。 但我無法手動更改,因為這是用戶的輸入。
我不認為這個問題與反斜線,因為如果我改變replacement.txt
到new_content '\\anyAlaphbetCharacter'
上面的代碼(不addslahes和stripslash)將打印: new_content '\\anyAlaphbetCharacter'
,這就是正確的。
請幫助我了解最新情況以及解決方案?
我建議您一個技巧,是在preg_replace之前用\\
這樣的特殊單詞替換\\
,以防止[backslash]
任何問題
$replacement = str_repalce(
\\`, [backslash]
,$ replacement);`
然后在preg_replace調用之后將其替換回
$subject = str_repalce(
[反斜杠] ,
\\`,$ subject);`
到底是怎么回事。 我認為php將\\0
simbol定義為"\\0" (ASCII 0 (0x00)), the NUL-byte.
嘗試使用preg_quote()函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.