思維新建站官網: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代碼如何轉換,作用不可忽視!除非你只是純輸出數據庫里面的數據而已!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。