我有一个论坛,任何用户都可以写文章。该论坛由aloha编辑器提供用户输入功能。它有一个用于编辑的页面和另一个用于显示的页面。但是当用户尝试输入html代码时会出现问题。
假设用户编写标题标记
`<h1>header</h1>`
正在输出
我想要输出
<h1>Header</h1>
任何支持?。
答案 0 :(得分:1)
当用户提交文章时,您需要在渲染文章之前使用htmlentities(PHP htmlentities)。
答案 1 :(得分:0)
你应该转义html代码,例如你应该使用:
<h1>Header</h1>
而不是
<h1>Header</h1>
答案 2 :(得分:0)
我很抱歉,但我担心我的答案不是最好的,我知道有一些更好的技巧可以达到这个(使用@chiwangc所说的)但是如果你曾经卡住了你可以使用我喜欢的东西。
只需将要输出的html代码放在'textarea'中(您可能要禁用它),例如
<textarea><h1>Header</h1></textarea>
请注意!这只是你的选择,但如果它满足你,那就欢呼。
希望它有所帮助。
答案 3 :(得分:0)
我不知道什么是 aloha编辑器,但你绝对应该检查用户输入的安全中断尝试(js-includes,sql-injects等等)。例如,它可能是像这样的函数,我在我的一个项目中使用了它:
function filterMsg($m){
$m=trim( stripslashes( urldecode($m) ) );
$m=htmlentities( $m, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8' );
$m=preg_replace( '/[\\s\\t]+/iu', ' ', $m );
$m=preg_replace( '/[\\s\\|]{2,999}/iu', '|', $m);
$m=preg_replace( '/([^\\|]{1,40})[\\|]+/iu', '$1 ', $m);
$m=str_replace( '|', '<br>', $m);
$m=str_replace( "\n", '<br>', $m);
return $m;
}
但如果你只是想展示未解析的内容,你可以使用<xmp></xmp>
html标签。