PHP strip_tags()导致换行符问题?

时间:2014-01-11 16:07:23

标签: php line-breaks strip-tags

我从头开始建立一个公共论坛,并进行微调,并立即测试所有内容。我目前停留在剥离所有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

问题解决了!

1 个答案:

答案 0 :(得分:0)

您正在将三个函数应用于字符串 - mysql_real_escape_stringstrip_tagsnl2br2。订单应该相反,因为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 ''