首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP str_replace找不到多行NOWDOC文本

PHP str_replace找不到多行NOWDOC文本
EN

Stack Overflow用户
提问于 2014-10-26 14:10:58
回答 1查看 739关注 0票数 0

我的理解是,使用PHP (v5.3及更高版本)中的NOWDOC功能,不需要转义字符。

我试图在PHP文件中查找和替换文本。案文如下:

代码语言:javascript
复制
$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也是如此(我正在使用它进行测试)。

我想知道这是否是由于字符串中的特殊字符造成的,但是如果我单独为它们执行一个strposstr_replace,例如.

代码语言:javascript
复制
$OldString = <<<'EOD'
<?php echo zen_draw_textarea_field('comments', '45', '3'); ?>
EOD;

...works,正如我所期望的。

引起问题的似乎是多行,但HEREDOC和NOWDOC的全部要点是,它们允许将多行文本放入一个变量中。

我的搜索和替换字符串是:

代码语言:javascript
复制
$pos = strpos($content, $OldString);
if ($pos !== false) { 
   ...

代码语言:javascript
复制
$content = str_replace($OldString, $NewString, $content);

如果有任何不同,我将使用file_get_contents从文件中获取文本。

EN

回答 1

Stack Overflow用户

发布于 2014-10-26 14:20:35

您所关联的字符串函数(strposstr_replace)是二进制安全的。这意味着它们需要逐字节匹配字符串,以实现精确的匹配。

您的示例显示了字符串中的换行。根据平台的不同,这些可能会有所不同。您可能只是在寻找一个多行字符串,它在所读取的文件的字符串和PHP代码中定义的字符串中有不同的编码方式。

通过创建字符串的六边形,您可以轻松地通过创建字符串的二进制序列来验证这一点:

另一个标志是当将var_dump与这些字符串一起使用时,会显示一个意想不到的不同的二进制长度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26573872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档