在提交之前用JS转化一下.转化后再提交:<script language=javascript>
function coder(str)
{
   var s = "";
   if (str.length == 0) return "";
   for (var i=0; i<str.length; i++)
   {
      switch (str.substr(i,1))
      {
          case "<"  : s += "&lt;";   break;
          case ">"  : s += "&gt;";   break;
          case "&"  : s += "&amp;";  break;
          case " "  : s += "&nbsp;"; break;
          case "\"" : s += "&quot;"; break;
          case "\n" : s += "<br>";   break;
          default   : s += str.substr(i,1); break;
      }
   }
   return s;
}
</script>

解决方案 »

  1.   

    希望能引起大家的关注:
      比如就我们现在这个论坛是怎么处理这个问题的?不过他用的是 asp.多谢楼上的回答,但实际上不好用。我借用了别人的源代码,但还是一知半解:
    比如英文的空格,贴上去后都没有了。其它倒还可以。function check_str($txt) {
    $count=0;
    $arrtemp=$txt;
    $len=strlen($txt);
    $txt=$txt.'            ';
    for ( $i=0; $i<$len; $i++) {
    if (ord($txt[$i])<128){
    $count = $count+1;
    }
    if ( ord($txt[$i])==10 or ord($txt[$i])==32) {$count=0;}
    if ($count>=70) {
    for ($j=$i;$j<$len;$j++){
    $txt[$j+1]=$arrtemp[$j];
    }
    $txt[$i]="\n";
    $len=$len+1;
    $txt[$len]=$arrtemp[$len-1];
    $count=0;
    $arrtemp=$txt;
    }//end if count
    }
    $txt=trim($txt);
    return $txt;
    }//end function check_strfunction encode( $txt ) {
    $txt=strip_tags($txt);
    $txt=htmlspecialchars($txt);
    $message=StripSlashes($txt);
    return $message;
    }  //end of function encode
      

  2.   

    不用for循环,也不用javascript就可以
    $jt是文章内容
    $jt = htmlspecialchars($jt);
    $jt = str_replace("\n", "<br>", $jt);
    $jt = str_replace(" ", "&nbsp;", $jt);
    $jt = str_replace(" <", "&lt;", $jt);
    $jt = str_replace("> ", "&gt;", $jt);