天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

php htmlentities和htmlspecialchars 的區別

The translations performed are:
復制代碼 代碼如下:
'&' (ampersand) becomes '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
'<' (less than) becomes '<'
'>' (greater than) becomes '>'

htmlspecialchars 只轉化上面這幾個html代碼,而 htmlentities 卻會轉化所有的html代碼,連同里面的它無法識別的中文字符也給轉化了。

我們可以拿一個簡單的例子來做比較:
復制代碼 代碼如下:
$str='<a href="test.html">測試頁面</a>';
echo htmlentities($str);
// <a href="test.html">²âÊÔÒ³Ãæ</a>

$str='<a href="test.html">測試頁面</a>';
echo htmlspecialchars($str);
// <a href="test.html">測試頁面</a>

結論是,有中文的時候,最好用 htmlspecialchars ,否則可能亂碼

另外參考一下這個自定義函數
復制代碼 代碼如下:
function my_excerpt( $html, $len ) {
// $html 應包含一個 HTML 文檔。
// 本例將去掉 HTML 標記,Javascript 代碼
// 和空白字符。還會將一些通用的
// HTML 實體轉換成相應的文本。
$search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 Javascript
"'<[///!]*?[^<>]*?>'si", // 去掉 HTML 標記
"'([/r/n])[/s]+'", // 去掉空白字符
"'&(quot|#34);'i", // 替換 HTML 實體
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(/d+);'e"); // 作為 php 代碼運行
$replace = array ("",
"",
"http://1",
"/"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(//1)");
$text = preg_replace ($search, $replace, $html);
$text = trim($text);
return mb_strlen($text) >= $len ? mb_substr($text, 0, $len) : '';
}

htmlspecialchar()函數和htmlentities()函數類似都是把html代碼轉換,htmlspecialchars_decode是把轉化的html的編碼轉換成轉換回來。

我們可以拿一個簡單的例子來做比較:
復制代碼 代碼如下:
$str='<a href="test.html">測試</a>';
$transstr = htmlspecialchars($str) ;
echo $transstr . "<br />";
echo htmlspecialchars_decode($transstr)";

運行上面的代碼,就可以看出兩者的差別了。

一直都知道 php 中的 htmlentities 和 htmlspecialchars 函數都能把 html 中的特殊字符轉換成對應的 character entity (不知道怎么翻譯),也一直都知道 htmlentities 和 htmlspecialchars 函數有區別,但是一直都用不到這兩個函數,也就沒去研究過到底有什么區別。


今天用到了,懶得看 php 手冊里的鳥語,覺得這種問題應該會有人用中文寫過,于是 Google 關鍵詞“htmlentities htmlspecialchars”,答案千篇一律。我已經司空見慣了,復制粘貼連小學生都會。經過對比發現,每篇文章大概都包含兩部分:

第一部分是引用 php 手冊的說明:

php 手冊中對 htmlspecialchars 寫道:

The translations performed are:
復制代碼 代碼如下:
‘&' (ampersand) becomes ‘&'
‘"' (double quote) becomes ‘"' when ENT_NOQUOTES is not set.
”' (single quote) becomes ‘'' only when ENT_QUOTES is set.
‘<' (less than) becomes ‘<'
‘>' (greater than) becomes ‘>'

這部分無可厚非,但是第二部分的解釋卻并不怎么正確:

htmlspecialchars 只轉化上面這幾個html代碼,而 htmlentities 卻會轉化所有的html代碼,連同里面的它無法識別的中文字符也給轉化了。

我們可以拿一個簡單的例子來做比較:
復制代碼 代碼如下:
<?php
$str='<a href="test.html">測試頁面</a>';
echo htmlentities($str);

// <a href="test.html">²âÊÔÒ³Ãæ</a>

$str='<a href="test.html">測試頁面</a>';
echo htmlspecialchars($str);
// <a href="test.html">測試頁面</a>

?>

結論是,有中文的時候,最好用 htmlspecialchars ,否則可能亂碼。

難道 htmlentities 函數只有一個參數嗎?當然不是!htmlentities 還有三個可選參數,分別是 $quote_style、 $charset、 $double_encode,手冊對 $charset 參數是這樣描述的:

Defines character set used in conversion. The default character set is ISO-8859-1.

從上面程序輸出的結果判斷,$str 是 GB2312 編碼的,“測試頁面”幾個字對應的十六進制值是:

B2 E2 CA D4 D2 B3 C3 E6

然而卻被當成 ISO-8859-1 編碼來解析:

²âÊÔÒ³Ãæ

正好對應 HTML character entity 里的:

²âÊÔÒ³Ãæ

當然會被 htmlentities 轉義掉,但是只要加上正確的編碼作為參數,根本就不會出現所謂的中文亂碼問題:

$str='<a href="test.html">測試頁面</a>';

echo htmlentities($str, ENT_COMPAT, 'gb2312');
// <a href="test.html">測試頁面</a>三人成虎,以訛傳訛。

結論:htmlentities 和 htmlspecialchars 的區別在于 htmlentities 會轉化所有的 html character entity,而htmlspecialchars 只會轉化手冊上列出的幾個 html character entity (也就是會影響 html 解析的那幾個基本字符)。一般來說,使用 htmlspecialchars 轉化掉基本字符就已經足夠了,沒有必要使用 htmlentities。實在要使用 htmlentities 時,要注意為第三個參數傳遞正確的編碼。

php技術php htmlentities和htmlspecialchars 的區別,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品女上位在线观看 | 最近中文字幕完整版高清 | 久久黄色片 | 国产AV亚洲精品久久久久 | 红尘影院在线观看 | 99在线精品国自产拍不卡 | 欧美xxxx83d| 亚洲AV无码一区二区三区牛牛 | 久久伊人在 | 国产在线高清视频无码 | 成年女人色毛片免费 | av先锋影音资源男人站 | hd性欧美俱乐部中文 | 久久er国产精品免费观看2 | 别停好爽好深好大好舒服视频 | 国产成人免费视频 | 韩国精品无码少妇在线观看网站 | 久久综合给会久久狠狠狠 | 亚洲色在线 | 亚洲精品视频在线观看视频 | 国内国外精品影片无人区 | 午夜片无码区在线观看 | 76人遣返航班上71人呈阳性 | 中文字幕在线视频网站 | 久久人妻少妇嫩草AV無碼 | japansemature护士 JAPANRCEP老熟妇乱子伦视频 | 正在播放国产尾随丝袜美女 | 高h原耽肉汁动漫视频 | 国产强奷糟蹋漂亮邻居在线观看 | 免费国产成人手机在线观看 | 67194在线入口免费 | 国产成+人欧美+综合在线观看 | 久久精品国产亚洲AV久五月天 | 中文无码第3页不卡av | 第一次处破女高清电影 | 向日葵视频app下载18岁以下勿看 | 国产午夜精品久久理论片小说 | adc网址在线观看 | 女子初尝黑人巨嗷嗷叫 | 女人和男人插曲视频大全 | 亚洲AV精品一区二区三区不卡 |