strip_tags()函数
Strip HTML and PHP tags from a string
string strip_tags ( string $str [, string $allowable_tags ] )
参数
str
The input string.
必需。规定要检查的字符串。
allowable_tags
You can use the optional second parameter to specify tags which should not be stripped.
可选。规定允许的标签。这些标签不会被删除。
Note: HTML comments and PHP tags are also stripped. This is hardcoded and can not be changed with allowable_tags .
注释:该函数始终会剥离 HTML 注释。这点无法通过 allowable_tags 参数改变。
返回值
Returns the stripped string.
例子,清除html中的某个特定标签,其余标签保留。
<?php
/**
* 清除html特定标签
* edit by www.
*/
function strip_selected_tags($text, $tags = array())
{
$args = func_get_args();
$text = array_shift($args);
$tags = func_num_args() > 2 ? array_diff($args,array($text)) : (array)$tags;
foreach ($tags as $tag){
if( preg_match_all( '/<'.$tag.'[^>]*>([^<]*)<\/'.$tag.'>/iu', $text, $found) ){
$text = str_replace()($found[0],$found[1],$text);
}
}
return preg_replace( '/(<('.join('|',$tags).')(\n|\r|.)*\/>)/iu', '', $text);
}
$str = "123";
echo strip_selected_tags($str,array('b'));
?>
例2,strip_tags 过滤html标签
$text="<p>这是<b>测试</b><br /></p>";
echo "原始:".$text."<br />\n";
echo "保留b:".strip_tags($text,"<b>")."<br />\n";
echo "保留b p:".strip_tags($text,"<p><b>")."<br />";
echo "保留不了br:".strip_tags($text,"<br />");
?>
如下图所示:
保留不了<br />怎么办?
是因为它有空格,其实如果<p > 这样也是不行的
把<br />替换为<br/>吧:
再:
您可能感兴趣的文章:
php去除HTML标签的二种方法
php 去除多余的HTML标签
php用strip_tags完整去除所有html标签的实例分享
php删除html标签的三种方法分享
php删除html标签及字符串中html标签的代码
php 去除html标记之strip_tags与htmlspecialchars的区别分析
php删除字符串中html标签的函数
去掉内容中 html 标签的代码
提取html标签的php代码
php正则过滤html标签、空格、换行符等的代码示例
php去除html标签获得输入纯文本文档strip_tags
php使HTML标签自动补全闭合函数的代码
php实现html标签自动补全的代码
thinkPHP的Html模板标签的使用方法
要实现php立即刷新缓存,输出到浏览器的效果。
可以考虑使用 ob_flush() 和 flush() 两个函数,可以实现立即输出。
不过,在实际应用中,发现不同的服务器之间是不兼容的。
比如,在本地的环境(WIN XP+apache2+PHP5.2版本)下,以下代码可以立即输出内容:
<?php ob_start(); //打开输出缓冲区 for($i=0;$i<1000;$i++){ echo $i."<br>"; ob_flush(); flush(); } ?> //edit by www.
但相同的代码,放在服务器环境(WIN 2003 SERVER + APACHE + PHP5.2.5)后,上面的代码并不能立即输出。
对于php函数 ob_flush() 和 flush() 的理解:
“ob_flush 是刷新PHP自身的缓冲区。
flush 只有在PHP做为apache的Module(handler或者filter)安装时,才有实际作用,它是刷新WebServer(可以认为特指apache)的缓冲区,即刷新到浏览器输出。
有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。
而 IE浏览器 只有当接受到的 4096个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容(原因:Nginx有fastcgi 缓冲区,数据超出缓
冲区大小、或程序执行完,才会将内容输出到客户端: fastcgi_buffer_size 4k; )。
二者的正确使用顺序,应该是:先ob_flush, 然后flush。
当然,在其他sapi下,不调用flush也可以,但为了程序的兼容性,建议还是这样使用吧。
因此,在远程WIN 2003 SERVER服务器上,需要保证每次输出前加入以下语句:
重复空格的语句在 Linux 服务器下,是不需要的。
注意:Linux服务器下,apache会自动开启 gzip压缩的,而gzip压缩会使 flush() 失效。
对于 Linux服务器,需要关闭 gzip 压缩模式,方法如下:
在当前目录下.htaccess中,添加:
SetEnv no-gzip dont-vary
重启apache,使配置生效。
另外,为了不在每次 echo 后加 ob_flush(); 和 flush(); ,
可以在文件的开头部分加入 ob_implicit_flush(1); 即可。
修改后的代码(兼容IE/firefox):
<?php ob_start(); //打开输出缓冲区 ob_end_flush(); ob_implicit_flush(1); //立即输出 for($i=0;$i<1000;$i++){ echo str_repeat(" ",4096); //确保足够的字符,立即输出,Linux服务器中不需要这句 echo $i."<br>"; sleep(1); } ?> //edit by www.
在过滤垃圾信息时,经常会用到比较字符串的相似度,除了利用cookies、IP限制等技术外,还可以利用PHP自身带的similar_text函数,进行判断用户发帖内容的相似度。
similar_text() 函数计算两个字符串的匹配字符的数目,也可以计算两个字符串的相似度(以百分比计)。
例子,注意Mysql_query、Mysql_fetch_array及similar_text的用法:
<?php /** * 比较字符串的相似度 * edit by www. */ require('conn.php'); $sql="select title from content order by id desc limit 20"; //判断标题相似度 $result=mysql_query($sql,$conn); $cf=0; while($row=mysql_fetch_array($result)){ similar_text($row['title'], $title, $percent); //比较相似度 存放于$percent if($percent>90){$cf=1;break;} //飘易注:相似度高于90% 则判断重复 } if($cf==1){ echo "<SCRIPT language=JavaScript>alert('抱歉!禁止发布重复信息!');"; echo "this.location.href='vbscript:history.back()';</SCRIPT>"; mysql_close(); exit(); } ?>
代码说明:
其中title字段可以扩展成其他字段,如 content 字段,也一样的比较相似度。