我正在创建一个评论框,供人们提问。
我让很多人问他们如何做一些涉及在表单中输入代码的事情。
表格通过htmlpurifier确保其安全使用。
但是当有人输入回音代码等时,它不允许它。 或者,如果有人输入div,那么它也不允许这样做,即使在<&代码>。
例如:
<code><div class="classname"></div></code>
只会添加一个div。
和
<code><?php echo $word; ?></code>
根本不会显示代码。
我在htmlpurifier中设置的方式是:
$content = $_POST['comment'];
$rawf = str_replace('<code>', '<pre><code>', $content);
$rawfp = str_replace('</code>', '</code></pre>', $rawf);
require_once '../Libs/htmlPurifier/library/HTMLPurifier.auto.php';
$purifierconfig = HTMLPurifier_Config::createDefault();
$purifierconfig->set('HTML.Allowed', 'b,a[href],i,em,br,code,pre');
$purifier = new HTMLPurifier($purifierconfig);
$clean_html = $purifier->purify($rawfp);
$ticketpost = str_replace('<a ', '<a rel="nofollow" ', $clean_html);
然后使用PDO预处理语句将$ ticketpost插入到数据库中。
我有没有做过或做错了什么?
如果是这样,请帮助。
由于
答案 0 :(得分:1)
您的问题是,如果输入是真正的HTML,那么任何代码片段都需要进行转义才能显示在结果中。我们有特殊的<![CDATA[ put code here ]]>
语法,但有时候,您不希望用这样的额外语法来打扰用户。在这种情况下,您可以在代码标记上执行preg_replace_callback,其中回调会在两个代码标记之间转义代码。但请注意,现在,没有办法表达包含代码标签的代码片段!所以这是所有权衡。