[英]htmlentities() returns empty values despite UTF-8
所以我試圖使用htmlentities()
在PHP中轉義一個字符串。
問題是,htmlentities返回一個空字符串。
我正在通過html <form>
接收此字符串。 包含form標記的頁面具有以下meta標記: <meta charset="utf-8">
我的字符串以UTF-8編碼, htmlentites()
第三個參數是'UTF-8'
,但我仍然得到一個空字符串。
這是我的代碼:
$str = strtolower(trim($str));
var_dump($str, mb_detect_encoding($str), htmlentities($str), htmlentities($str, ENT_COMPAT, 'UTF-8'), htmlentities($str, ENT_COMPAT, 'ISO-8859-1'));
這是var_dump顯示的內容:
// Original string is é-è
// Expected output is é-è
string '�-�' (length=5) // Original string but why is the length 5 ?
string 'UTF-8' (length=5)
string '' (length=0)
string '' (length=0)
string 'ã©-ã¨' (length=28) // WTF ??
有人知道它從哪里來嗎?
好的,我發現了問題所在。 strtolower
引起了問題。
請使用mb_strtolower
var_dump($str, mb_detect_encoding($str), htmlentities($str), htmlentities($str, ENT_COMPAT, 'UTF-8'), htmlentities($str, ENT_COMPAT, 'ISO-8859-1'));
$str = trim($str);
var_dump($str, mb_detect_encoding($str), htmlentities($str), htmlentities($str, ENT_COMPAT, 'UTF-8'), htmlentities($str, ENT_COMPAT, 'ISO-8859-1'));
$str = strtolower($str);
var_dump($str, mb_detect_encoding($str), htmlentities($str), htmlentities($str, ENT_COMPAT, 'UTF-8'), htmlentities($str, ENT_COMPAT, 'ISO-8859-1'));
這是輸出:
// raw string é-è
string 'é-è' (length=5)
string 'UTF-8' (length=5)
string 'é-è' (length=17)
string 'é-è' (length=17)
string 'é-è' (length=28)
// trim('é-è')
string 'é-è' (length=5)
string 'UTF-8' (length=5)
string 'é-è' (length=17)
string 'é-è' (length=17)
string 'é-è' (length=28)
// strtolower('é-è')
string '�-�' (length=5)
string 'UTF-8' (length=5)
string '' (length=0)
string '' (length=0)
string 'ã©-ã¨' (length=28)
不知何故, strtolower()
似乎僅在“ ISO-8859-1”中有效,並且如您在var_dumps中所見,它轉換Ã
進入ã
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.