91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

htmlentities和htmlspecialchars 的區別有哪些

發布時間:2021-10-12 17:03:19 來源:億速云 閱讀:151 作者:柒染 欄目:開發技術

這篇文章將為大家詳細講解有關htmlentities和htmlspecialchars 的區別有哪些,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

  多人都以為htmlentities跟htmlspecialchars的功能是一樣的,都是格式化html代碼的,我以前也曾這么認為,但是今天我發現并不是這樣的。

  htmlentities和htmlspecialchars 的區別

  代碼如下:

  '&' (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='測試頁面';

  echo htmlentities($str);

  // 2aê?ò3??

  $str='測試頁面';

  echo htmlspecialchars($str);

  // 測試頁面

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

  另外參考一下這個自定義函數

  代碼如下:

  function my_excerpt( $html, $len ) {

  // $html 應包含一個 HTML 文檔。

  // 本例將去掉 HTML 標記,javascript 代碼

  // 和空白字符。還會將一些通用的

  // HTML 實體轉換成相應的文本。

  $search = array ("']*?>.*?'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 ("",

  "",

  "\\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='測試';

  $transstr = htmlspecialchars($str) ;

  echo $transstr . "

  ";

  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代碼,連同里面的它無法識別的中文字符也給轉化了。

  我們可以拿一個簡單的例子來做比較:

  代碼如下:

  $str='測試頁面';

  echo htmlentities($str);

  // 2aê?ò3??

  $str='測試頁面';

  echo htmlspecialchars($str);

  // 測試頁面

  ?>

  結論是,有中文的時候,最好用 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 編碼來解析:

  2aê?ò3??

  正好對應 HTML character entity 里的:

  2aê?ò3??

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

  $str='測試頁面';

  echo htmlentities($str, ENT_COMPAT, 'gb2312');

  // 測試頁面三人成虎,以訛傳訛。

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

關于htmlentities和htmlspecialchars 的區別有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔西| 青海省| 凤城市| 隆昌县| 汝州市| 平南县| 绥江县| 正定县| 雷山县| 滨州市| 昭苏县| 治县。| 惠水县| 旅游| 奉化市| 赤水市| 那曲县| 大厂| 游戏| 平阳县| 通河县| 桦南县| 乾安县| 抚松县| 深水埗区| 海原县| 城口县| 沈丘县| 土默特左旗| 榕江县| 宝应县| 内江市| 右玉县| 福泉市| 密山市| 保山市| 繁峙县| 石门县| 美姑县| 玉门市| 大石桥市|