簡體   English   中英

盡管UTF-8,htmlentities()返回空值

[英]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 &eacute;-&egrave;
string '�-�' (length=5) // Original string but why is the length 5 ?
string 'UTF-8' (length=5)
string '' (length=0)
string '' (length=0)
string '&atilde;&copy;-&atilde;&uml;' (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 '&eacute;-&egrave;' (length=17)
string '&eacute;-&egrave;' (length=17)
string '&Atilde;&copy;-&Atilde;&uml;' (length=28)
// trim('é-è')
string 'é-è' (length=5)
string 'UTF-8' (length=5)
string '&eacute;-&egrave;' (length=17)
string '&eacute;-&egrave;' (length=17)
string '&Atilde;&copy;-&Atilde;&uml;' (length=28)
// strtolower('é-è')
string '�-�' (length=5)
string 'UTF-8' (length=5)
string '' (length=0)
string '' (length=0)
string '&atilde;&copy;-&atilde;&uml;' (length=28)

不知何故, strtolower()似乎僅在“ ISO-8859-1”中有效,並且如您在var_dumps中所見,它轉換&Atilde; 進入&atilde;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM