所以我试图使用htmlentities()
来逃避PHP中的字符串
问题是,htmlentities返回一个空字符串。
我通过html <form>
收到此字符串。包含表单标记的页面包含以下元标记:<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 ??
任何人都知道它来自哪里?
答案 0 :(得分:0)
好的我发现了什么问题。
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中看到的那样,它将Ã
转换为ã