Я застрял в этом вопросе со вчерашнего дня, я просто хочу понять, как правильно избегать строк, я не нашел полного ответа.
вот моя проблема =>
у меня есть буксирные файлы:
замена.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'
вышеприведенный код (без аддлашей и полосок) будет печатать: new_content '\anyAlaphbetCharacter'
и это правильно.
пожалуйста, помогите мне понять, что происходит? и какое решение?
Я хотел бы предложить вам один трюк, который должен заменить \
с каким-то особым словом, как [backslash]
перед preg_replace, чтобы избежать каких-либо проблем с ним
$replacement = str_repalce(
\ `, [backslash]
$ замена); `
затем заменить его обратно после вызова preg_replace
$subject = str_repalce(
[Обратная косая],
\ `, $ Субъект);`
Что здесь происходит. Я думаю, что PHP определяет \0
символ как "\0" (ASCII 0 (0x00)), the NUL-byte.
Попробуйте использовать функцию preg_quote ().