如何逃避反斜杠以获得安全的字符串? PHP

时间:2015-12-04 09:49:31

标签: php escaping octal addslashes

我从昨天开始就陷入了这个问题,我只是想了解如何正确地逃避字符串,我没有找到任何完整的答案。

这是我的问题=>

我有两个文件:

  1. replacement.txt,这是内容:

    new_content' \ 0020'

  2. subject.txt,这是内容:

    结构old_content

  3. 这是我的代码:

    $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 'structure old_content20'。为什么?因为有反斜杠没有逃脱。

    这是我做的,但没有运气:(

    • 我曾尝试在$replacement = addslashes($replacement);之前添加preg_replace:但这是我得到的:new_content \'\0020\',不正确,因为在引号之前有反映。

      < / LI>
    • 我曾尝试过删除前一个结果$subject = stripslashes ( $subject ),但这是我得到的:new_content '020',不正确!

    唯一对我有用的是编辑replacement.txt到这个: new_content '\\0020'。但我无法手动更改,因为它是用户的输入。

    我不认为反斜杠的问题,因为如果我将replacement.txt更改为new_content '\anyAlaphbetCharacter'上面的代码(没有addlahes和striplash)将打印:new_content '\anyAlaphbetCharacter'那是对的。

    请帮助我了解发生了什么?以及解决方案是什么?

2 个答案:

答案 0 :(得分:1)

我建议你在preg_replace之前用\之类的特殊单词替换[backslash]以避免任何问题

$replacement = str_repalce( \`,[backslash],$ replacement);`

然后在preg_replace调用之后将其替换回来

$subject = str_repalce( [反斜线] , \`,$主题);`

答案 1 :(得分:0)

发生了什么事。我认为php将\0 simbol定义为"\0" (ASCII 0 (0x00)), the NUL-byte.

尝试使用preg_quote()函数。