整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

php的HTML输入和输出复杂净化

思维新建站官网:www.inspinovation.cn

文|何掌柜

对于很多 web 应用来说,简单地转义 HTML 是不够的。 你可能想完全去除任何HTML,或者允许一小部分子集的 HTML 存在。 若是如此,则使用 HTML Purifier 库。

HTML Purifier 是一个经过充分测试但效率比较低的库。 这就是为什么如果你的需求并不复杂就应使用htmlentities(), 因为它的效率要快得多。

HTML Purifier 相比 strip_tags() 是有优势的, 因为它在净化 HTML 之前会对其校验。 这意味着如果用户输入无效 HTML,HTML Purifier 相比 strip_tags() 更能保留 HTML 的原意。 HTML Purifier 高度可定制,允许你为 HTML 的一个子集建立白名单来允许这个 HTML 子集的实体存在输出中。

但其缺点就是相当的慢,它要求一些设置,在一个共享主机的环境里可能是不可行的。 其文档通常也复杂而不易理解。 以下示例是一个基本的使用配置。 查看文档阅读 HTML Purifier 提供的更多更高级的特性。

示例

// Include the HTML Purifier library

require_once('htmlpurifier-4.4.0/HTMLPurifier.auto.php');

// Oh no! The user has submitted malicious HTML, and we have to display it in our web app!

$evilHtml = '

Mua-ha-ha! Twiddling my evil mustache...

';

// Set up the HTML Purifier object with the default configuration.

$purifier = new HTMLPurifier(HTMLPurifier_Config::createDefault());

$safeHtml = $purifier->purify($evilHtml);

// $safeHtml is now sanitized. You can output $safeHtml to your users without fear!

?>

陷阱

以错误的字符编码使用 htmlentities() 会造成意想不到的输出。 在调用该函数时始终确认指定了一种字符编码,并且该编码与将被净化的字符串的编码相匹配。 更多细节请查看 UTF-8 一节。

使用 htmlentities() 时,始终包含 ENT_QUOTES 和字符编码参数。 默认情况下,htmlentities() 不会对单引号编码。多愚蠢的默认做法!

HTML Purifier 对于复杂的 HTML 效率极其的低。可以考虑设置一个缓存方案如APC来保存经过净化的结果以备后用。

因思维新专注于高端网站订制开发,不仅仅为您建设网站,还为您做网络营销。

//数据量在1万以下的建议使用phpexcel
<a target="_blank" href="{:url('api/export/index')}">导出</a>

//控制器里面的方法
static function getData($total_page=1, $page_nums=10000)
 {
 
 for($i=0; $i<$total_page; $i++)
 {
 //$sql = "SELECT * FROM xcx_members WHERE id > ({$i}*{$page_nums}) LIMIT {$page_nums}";
 $start = $i * $page_nums;
 $sql = "SELECT * FROM xcx_members LIMIT {$start},{$page_nums}";
 //$sql2="SELECT a.*, (select mobile from xcx_members b where b.id=a.parent_id) as tjr_mobile FROM xcx_members a where id>=(select id from xcx_members where v_type=1 order by id asc limit {$start},1) limit {$page_nums}";
 //此处members表需要组合索引 create index v_type_id_index on members(v_type,id);
 //字段v_type tinyint default 0
 $list = Db::query($sql)
 foreach($list as $k=>$v)
 {
 yield [$v['mobile'],$v['realname'],$v['nickname'],$v['avatar']];
 }
 
 unset($list);
 //每1万条数据就刷新缓冲区
 ob_flush();
 flush();
 //sleep(1);
 }
 }
 
 public function index()
 {
 //生成的csv文件名称
 $demo_csv_filename = time().".csv";
 
 //每页查询数量
 $page_nums = 10000;
 
 //总页数
 $count = Db::name("members")->count("id");
 if($count < $page_nums)
 {
 $total_page = 1;
 }
 else
 {
 $total_page = intval($count / $page_nums) + 1; 
 }
 //csv文件存入的路径
 $base_path = CMF_ROOT."public/upload/";
 
 //导入表头
 $title = [
 '手机号','真实姓名','昵称','头像'
 ];
 
 $fp = fopen($base_path.$demo_csv_filename, 'w');
 
 //写入标题
 fputcsv($fp, $title);
 
 fclose($fp);
 
 $fp = fopen($base_path.$demo_csv_filename, 'a');
 
 foreach(self::getData($total_page, $page_nums) as $m=>$n)
 {
 //写入内容
 fputcsv($fp, $n);
 }
 
 fclose($fp);
 
 $download_url = cmf_get_domain()."/upload/".$demo_csv_filename;
 
 echo "<script type='text/javascript'>document.location.href='{$download_url}'</script>";
 
 die;
 }

家都知道,PHP是开源的,免费的,所以使用PHP的人数量基数也非常之大。所以许多对于不太懂PHP的人来说,知道如何实现html代码与php互相转换有助于你运用php实现html代码的输出。

(先不讨论这是否是一片小白文,只是分享这样的技巧给需要的人)

一、html代码转换成php代码

首先,使用dreamweaver等类似软件,将需要进行转换的html代码整理出来

其次,使用站长工具里面的html转换功能将html代码转换成php代码,如图所示:

需要转换的html代码

转换后的php代码

最后,将转换的后php代码放置到需要实现的php页面之后,即可实现php输出html代码。

二、如何将php代码转换成html代码

简单解决方法有2种:

方法一:将php页面生成html页面,直接查看html页面的源码,即可得到想要的html代码。

方法二:使用站长工具将php代码转换成html代码。具体详细步骤就不细说了。

想必看到此处,也许有不少人不知道为什么要做html与php的转换吧?html与php有什么作用呢?

一、使用php语言制作网页时,方便输出自己想要的html代码,减少代码的编写量,毕竟我只需要写一遍简单的html代码,即可得到php代码。(当然只是对于php新手来说,或许老手已经习惯了吧)

二、方便看不懂php代码的人也可知道这些php代码具体输出的是什么html代码,其实就是相当于在php代码中剔除了<?php,?>,echo,"",\n等字符而已,便于阅读吧!

三、最重要的一点,只为方便对此有需求的人,对此没有需求的人,其实任何作用都没有!

最后,学习php语言的小白们,如何输出html代码,不放先借用工具查看输出规则哦!有助于加快学习php的进度!当然,涉及数据库方面的输出,也需要用到html代码制作页面样式,所以,学习html代码与php代码如何转换,作用不可忽视!除非你只是纯输出数据库里面的数据而已!