【问题标题】:Is there a PHP function to htmlspecialchars() everything except for certain tags?htmlspecialchars() 除了某些标签外,是否有 PHP 函数?
【发布时间】:2014-01-18 05:29:33
【问题描述】:

如果我可以调用my_escape($text, '<p><b><i>') 来转义除所有<p><b><i> 标记之外的所有内容,那就太好了。我正在寻找一个通用的解决方案,我可以在其中指定任意一组标签。这存在吗?如果不是,实现它的最佳方法是什么?

【问题讨论】:

    标签: php tags html-escape-characters


    【解决方案1】:

    在 htmlspecialchars 函数中,它将 html 标签转换为

    & to &
    " to "
    ' to '
    < to &lt;
    > to &gt;
    

    转换后可以反向解码

    <?php
    $test="<p><b><a>Test</b></a></p>";
    
    $test = htmlspecialchars($test);
    
    $test = str_replace("&lt;p&gt;", "<p>", $test);
    $test = str_replace("&lt;i&gt;", "<i>", $test);
    $test = str_replace("&lt;b&gt;", "<b>", $test);
    $test = str_replace("&lt;/b&gt;", "</b>", $test);
    $test = str_replace("&lt;/i&gt;", "</i>", $test);
    $test = str_replace("&lt;/p&gt;", "</p>", $test);
    
    echo $test;
    ?>
    

    【讨论】:

      【解决方案2】:

      你最好的选择是做这样的事情

      // Add placeholders
      $search = array('<p>', '<b>');
      $replace = array("\ap\a", "\ab\a");
      $text = str_replace($search, $replace, $text);
      
      $text = htmlspecialchars($text);
      
      // Put it all back together
      $text = str_replace($replace, $search, $text);
      

      最好使用正则表达式,但这解释得更多。

      【讨论】:

      • 如果你在做编辑器,我会看 SCEditor 或类似的。
      • 是的,虽然这不太可能,但我会使用不同的占位符,例如 \a
      • \a 是什么?如果我echo "\a" 只是\a
      • \a 是铃声/哔声字符。 php.net/manual/en/regexp.reference.escape.php
      • 我建议使用更像@Nsk 回答的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      相关资源
      最近更新 更多