我正在尝试为我的网站制作自己的BBCode解析器,我正在寻找一种“htmlentities()”的方法,除了PRE标签内的代码和PRE标签本身。
例如:
<b>Hello world</b> (outputs <b>Hello world<>) <pre>"This must not be converted to HTML entities"</pre> (outputs <pre>"This must not be converted to HTML entities"</pre>)
我真的不知道如何做到这一点。
任何形式的帮助将不胜感激:)
感谢。
答案 0 :(得分:1)
如果要练习,好的。但如果它只是为了得到这个功能,那么就不要重新发明轮子。解析并不是一件容易的事,并且有很多成熟的解析器。当然,我先看看PEAR包。试试HTML_BBCodeParser。
如果你真的想自己做,你有两种方法:
通常两者兼而有之。但是因为标签可以嵌套并且形成不良,所以编码真的很难。至少,使用通用的解析器代码并定义词汇字段,从头开始,它将花费你用来编写网站的所有时间。
顺便说一下:使用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));
答案 1 :(得分:1)
您可以将<pre> … </pre>
转换回<pre> … </pre>
:
// convert anything
$str = htmlspecialchars($str);
// convert <pre> back
$str = preg_replace('/<pre>((?:[^&]+|&(?!lt;\\/pre>))*)<\\/pre>/s', '<pre>$1</pre>', $str);