【问题标题】:Strip tags (&lt; and &gt;)剥离标签(< 和 >)
【发布时间】:2014-03-16 14:30:31
【问题描述】:

我正在寻找一种在 PHP 中去除 &amp;lt; 和 &amp;gt; 以及它们之间的所有内容的方法。并将其保存到变量中。

例子:

从这里: &amp;lt;p&amp;gt;This is a paragraph with &amp;lt;strong&amp;gt;bold&amp;lt;/strong&amp;gt; text&amp;lt;/p&amp;gt;

对此:This is a paragraph with bold text

有人有例子或想法吗?谢谢!

【问题讨论】:

  • 你能发布一个示例字符串吗?
  • @PeeHaa 示例已添加。

标签: php regex variables str-replace


【解决方案1】:

如果您没有嵌套的&amp;gt; 和&amp;lt;,那么您可以尝试以下方法来匹配出现次数:

$matches = array();
preg_match_all('/&lt;([\s\S]*?)&gt;/s', $string, $matches);

自己试试here。请注意查询中的?,这使得括号中的匹配变得不贪心。 您可以找到类似问题的答案here on SO。

如果你想去掉这些值,那么使用preg_replace_callback:

<?php
$string = '&lt;p&gt;This is a paragraph with &lt;strong&gt;bold&lt;/strong&gt; text&lt;p&gt;';
echo "$string <br />";
$string = preg_replace_callback(
        '/&lt;([\s\S]*?)&gt;/s',
        function ($matches) {
            // do whatever you need with $matches here, e.g. save it somewhere
            return '';
        },
        $string
    );
echo $string;
?>

【讨论】:

  • 效果很好!有关于如何在每个条纹标签后附加空格的快速提示吗?
  • 没关系...我想通了。再次感谢您的解决方案:)
【解决方案2】:

【讨论】:

  • 这只是部分回答了问题
  • 例子是:$stringConverted = html_entity_decode($stringToConvert);请参阅 php 文档中的示例 -> it2.php.net/html_entity_decode
【解决方案3】:

类似这样的:

$matches = array();
// Save
preg_match_all('!(<[^>]++>)!', $string, $matches);
// Strip
$string = strip_tags($string);

如果不是拼写错误并且您想对已经转义的字符串进行操作并使用preg_replace('/(&amp;lt;.+?&amp;gt;)/', '', $string) 去除标签,则将&amp;lt; 替换为&amp;lt; 并将&amp;gt; 替换为&amp;gt;。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多