我从昨天开始就陷入了这个问题,我只是想了解如何正确地逃避字符串,我没有找到任何完整的答案。
这是我的问题=>
我有两个文件:
replacement.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 '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'
上面的代码(没有addlahes和striplash)将打印:new_content '\anyAlaphbetCharacter'
那是对的。
请帮助我了解发生了什么?以及解决方案是什么?
答案 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()函数。