我的理解是,使用PHP (v5.3及更高版本)中的NOWDOC功能,不需要转义字符。
我试图在PHP文件中查找和替换文本。案文如下:
$OldString = <<<'EOD'
<fieldset class="foobar" id="comments">
<legend><?php echo TABLE_HEADING_COMMENTS; ?></legend>
<?php echo foobar_field('comments', '45', '3'); ?>
</fieldset>
EOD;这个文本确实出现在目标PHP文件中,但是str_replace没有找到它。str_pos也是如此(我正在使用它进行测试)。
我想知道这是否是由于字符串中的特殊字符造成的,但是如果我单独为它们执行一个strpos或str_replace,例如.
$OldString = <<<'EOD'
<?php echo zen_draw_textarea_field('comments', '45', '3'); ?>
EOD;...works,正如我所期望的。
引起问题的似乎是多行,但HEREDOC和NOWDOC的全部要点是,它们允许将多行文本放入一个变量中。
我的搜索和替换字符串是:
$pos = strpos($content, $OldString);
if ($pos !== false) {
...和
$content = str_replace($OldString, $NewString, $content);如果有任何不同,我将使用file_get_contents从文件中获取文本。
发布于 2014-10-26 14:20:35
您所关联的字符串函数(strpos,str_replace)是二进制安全的。这意味着它们需要逐字节匹配字符串,以实现精确的匹配。
您的示例显示了字符串中的换行。根据平台的不同,这些可能会有所不同。您可能只是在寻找一个多行字符串,它在所读取的文件的字符串和PHP代码中定义的字符串中有不同的编码方式。
通过创建字符串的六边形,您可以轻松地通过创建字符串的二进制序列来验证这一点:
另一个标志是当将var_dump与这些字符串一起使用时,会显示一个意想不到的不同的二进制长度。
https://stackoverflow.com/questions/26573872
复制相似问题