【问题标题】:str_replace on an html content not workinghtml 内容上的 str_replace 不起作用
【发布时间】:2018-01-14 12:38:57
【问题描述】:

我有这个 HTML 内容:

$test = '<section><div class="row">
        <div class="col-xs-12" data-type="container-content">
        <section data-type="component-photo"><div class="photo-panel">
        <img src="http://somewhere.com/XpV8lCLD6pChrysanthemum.jpg" width="100%" height="" style="display: inline-block;">
</div></section></div>
</div></section>';

我有这个 str_replace 代码,以便它为 img 添加一个结束标记:

$new = str_replace('"></div>', '"/></div>', $test);

echo $new;

使用检查元素检查时,图像未按预期关闭。我在这里做错了什么?

补充说明:

我需要 PHPWord 的结束标记才能工作。此外,$test 的值来自 $_POST,因为这是通过 AJAX 提供的。

谢谢

【问题讨论】:

  • 因为有换行符
  • 我尝试删除换行符但内容没有被替换
  • 检查元素(在 chrome 中?)永远不会在 img 上显示结束斜线。不需要,因为 img 元素是隐式自关闭的。除非您想使用严格的 xhtml 而不是更常见的 html 语言,否则您永远不需要用 /> 关闭 img 标签。对于 hr、br、input 和 meta 等元素也是如此。
  • @René 我正在使用 PHPWord,当一个 img 标签丢失时它正在关闭 / 它返回一个错误。
  • 这是添加到您的问题中的重要信息。您确实说了一些关于“检查元素”(在未知浏览器中)的内容,但关闭它与浏览器无关,考虑到这一点,我认为这是一个无关紧要的问题。

标签: php html phpword


【解决方案1】:

标签和结束标签之间有一个换行符。您应该重新格式化 $test 变量或使用:

$new = preg_replace('/>[\n\r]<\/div>/', '/></div>', $test);

但是,您在这里处于危险境地,因为所有匹配项都将被替换。 HTML 是一种可以执行not play well with regex 的语言。

如果可能的话,最好在问题变成 html 形式之前解决它。

【讨论】:

  • 一个正在运行的脚本在转换为 HTML 时会出于某种原因对其进行更改,所以我在这里能做的最好的事情就是在 php 中对其进行操作
  • 好吧,在这种情况下,这对于这个简单的字符串来说就很好了。
  • 表达式与我的字符串不匹配。我在 RegExr 上测试了它
  • 当我测试它时它确实如此......您需要在 / 和 /g 之间输入的模式是:>[\n\r]
    。当我运行 php 脚本时,它也可以工作。
【解决方案2】:

要执行您要查找的内容,您需要搜索该行中的文本(其他答案也可以更直接地说明 - 问题是换行符。

$new = str_replace('ck;">\n</div><section>','ck;">\n</div></div><section>',$test);

【讨论】:

  • "&gt; 之前的结尾行是动态的,所以不能一直猜对
  • 你能说得更具体点吗? "> 并没有说明什么 - 里面有很多。关键是你必须找到一些“可测试”的东西并使用它。我正在调整我的答案,以适应我认为你正在寻找的东西,尽管猜测你的意思很难回答。
  • 抱歉,这是我发现内容中最具体的部分。如果我也能更具体地了解它,我会喜欢它的。谢谢
猜你喜欢
  • 2013-07-09
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
相关资源
最近更新 更多