我从头开始建立一个公共论坛,并进行微调,并立即测试所有内容。我目前停留在剥离所有html标签的功能,期望我用于播放youtube-videoes和粗体/斜体标签,以便用户至少有一些方式来设置他们的帖子。我的问题是,当我使用nl2br2()函数过滤我的post-string时,它dosnt从字符串中剥离html-tags,如果我删除nl2br2(),它的工作正常。我的理论是strip_tags()函数也剥离了原生系统换行符\ n和\ r \ n,因此nl2br2()没有得到任何换行符。我真的很确定,这就是问题所在!我怎样才能使这两个功能协同工作? strip_tags()还有其他选择吗?或者你可以以某种方式告诉功能,停止剥离那些换行符!!它真的很烦人,今天花了很多时间试图解决这个问题:D任何帮助都是非常有用的!
这个DIDN' T WORKD:
function nl2br2($string) {
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
return $string;
}
$str = "$_POST[indlaeg]";
mysql_real_escape_string($str); // PROTECT FROM SQL INJECTIONS THROUGH SINGLE QUOTES ''
strip_tags($str, '<b><i><a><video><br>'); // REMOVE ALL TAGS EXPECT
$str = nl2br2($str); // CONVERT LINE BREAKS TO <br>
这个问题&#39;工作:
$str = mysql_real_escape_string(strip_tags(nl2br2($_POST['indlaeg']), '<b><i><a><video><br>'));
这个工作!!!!
function html2txt($document){
$search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
'@<style[^>]*?>.*?</style>@siU', // Strip style tags properly
'@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments including CDATA );
$text = preg_replace($search, '', $document);
return $text;
}
$str = "$_POST[indlaeg]";
$str = html2txt($str);
$str = nl2br2($str);
html2txt()函数是从天堂发出的!它剥夺了所有邪恶的标签!包括单引号&#39;&#39;黑客喜欢用于SQL注入:D
问题解决了!
答案 0 :(得分:0)
您正在将三个函数应用于字符串 - mysql_real_escape_string
,strip_tags
和nl2br2
。订单应该相反,因为mysql_real_escape_string
在\n
和\r
之前添加了反斜杠,导致字符串无法由nl2br2
处理。如果您先申请nl2br2
,最后申请strip_tags
,最后申请mysql_real_escape_string
,则不会出现此类问题。
替换这四行
$str = "$_POST[indlaeg]";
mysql_real_escape_string($str); // PROTECT FROM SQL INJECTIONS THROUGH SINGLE QUOTES ''
strip_tags($str, '<b><i><a><video><br>'); // REMOVE ALL TAGS EXPECT
$str = nl2br2($str); // CONVERT LINE BREAKS TO <br>
与
$str = $_POST['indlaeg'];
$str = nl2br2($str); // CONVERT LINE BREAKS TO <br>
$str = strip_tags($str, '<b><i><a><video><br>'); // REMOVE ALL TAGS EXCEPT A FEW
$str = mysql_real_escape_string($str); // PROTECT FROM SQL INJECTIONS THROUGH SINGLE QUOTES ''