我试图使用类似的东西:
$newdata = preg_replace($pattern, $replacement, $data);
现在我的替换就像是
$pattern = "/START(.*?)END/is";
$replacement = "START $config END";
现在,$ config包含
之类的内容array('Test\\\'s Page')
问题在于,在我写完内容后,$ newdata变为
START array('Test\\'s Page') END
正如您在上面看到的那样,单个\会丢失,因为它会被评估。我该如何避免?
答案 0 :(得分:0)
$replacement = "START".$config."END"
答案 1 :(得分:0)
您是否尝试将数组展平为字符串?
$replacement = sprintf('START %s END', implode('', $config));
编辑:既然你没有提到$config
的样子,我们就无法给出明确的答案。
答案 2 :(得分:0)
这可以按预期工作......至少根据manual of preg_replace。
要替换使用反斜杠,必须加倍(“\\\\”PHP字符串)。
这是必需的,因为您可以使用\\n
进行反向引用。如果你不想要一个后向引用但想要\
本身,你需要逃避它。如果你想要3个反斜杠,你必须写6个反斜杠。
$data = 'Some START END testdata';
$config = 'array(\'Test\\\\\\\\\\\\\'s Page\')';
$replacement = "START $config END";
$pattern = "/START(.*?)END/is";
var_dump($data, $config, $replacement, $pattern);
$newdata = preg_replace($pattern, $replacement, $data);
var_dump($newdata);
这将生成以下输出。
string(23) "Some START END testdata"
string(26) "array('Test\\\\\\'s Page')"
string(36) "START array('Test\\\\\\'s Page') END"
string(17) "/START(.*?)END/is"
string(47) "Some START array('Test\\\'s Page') END testdata"