簡體   English   中英

如何轉義反斜杠以獲取安全的字符串? PHP

[英]How to escape backslashes to have safe strings ? php

自昨天以來,我一直陷入這個問題,我只是想了解如何正確地對字符串進行轉義,我沒有找到任何完整的答案。

這是我的問題=>

我有兩個文件:

  1. replace.txt,這里是內容:

    new_content'\\ 0020'

  2. 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.txtnew_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM