-->

外HOWTO编码文本 与ヶ辆标签()? (PHP)(Howto encode texts o

2019-09-23 17:15发布

我试图使自己的BBCode解析器我的网站,我在寻找一种方式来“ヶ辆()”除了PRE标签里面的代码,以及PRE标签本身。

例如:

<b>Hello world</b> (outputs &lt;b&gt;Hello world&lt;&gt;)
<pre>"This must not be converted to HTML entities"</pre> (outputs <pre>"This must not be converted to HTML entities"</pre>)

我真的得到了关于如何做到这一点不知道。

任何形式的帮助,将不胜感激:)

谢谢。

Answer 1:

你可以转换&lt;pre&gt; … &lt;/pre&gt; &lt;pre&gt; … &lt;/pre&gt;<pre> … </pre>

// convert anything
$str = htmlspecialchars($str);
// convert <pre> back
$str = preg_replace('/&lt;pre&gt;((?:[^&]+|&(?!lt;\\/pre&gt;))*)&lt;\\/pre&gt;/s', '<pre>$1</pre>', $str);


Answer 2:

如果是练习,OK。 但是,如果它只是为了获得该功能,那么就不要推倒重来。 解析不是一件容易的事,并有大量成熟的解析器在那里。 当然,我会看看PEAR包第一。 尝试HTML_BBCodeParser 。

如果你真的想自己做,你有两种方式:

  • 正则表达式
  • 状态机

通常这两者的混合是很方便的。 但由于标签可以被嵌套,并形成严重,这真是一个坚硬的东西代码。 至少,使用通用解析器代码,定义你的词汇领域,从零开始,将采取一切您使用的代码的网站的时间。

BTW:使用BBparser没有从消毒用户输入的自由,你...

编辑:我今天心情好我,所以这里是关于如何使用HTML_BBCodeParser一个片段:

// if you don't know how to use pear, you'd better learn that quick
// set the path so pear is in it
ini_set("include_path", ini_get("include_path").":/usr/share/pear");
// include PEAR and the parser
require_once("PEAR.php");
require_once("HTML/BBCodeParser.php");

// you can tweak settings from a ini fil
$config = parse_ini_file("BBCodeParser.ini", true);
$options = &PEAR::getStaticProperty("HTML_BBCodeParser", "_options");
$options = $config["HTML_BBCodeParser"];

// here start the parsing
$parser = new HTML_BBCodeParser();
$parser->setText($the_mighty_BBCode);
$parser->parse();
$parsed = $parser->getParsed();

// don't forget to clean that
echo htmlspecialchars(striptags($parsed));


文章来源: Howto encode texts outside the
 tag with htmlentities()? (PHP)
标签: php regex bbcode