在此示例中,如何从MySQL编码文本?
这是使用utf8mb4_unicode_ci
在MySQL中显示的文本:
$ text ='Wiesław';
到目前为止,我已经尝试过:
header("Content-Type: text/html; charset=ISO-8859-1");
echo htmlentities($text);
echo '</br>';
echo html_entity_decode($text);
echo '</br>';
echo htmlspecialchars_decode($text);
echo '</br>';
echo htmlspecialchars_decode($text, ENT_NOQUOTES);
echo '</br>';
echo utf8_encode($text);
echo '</br>';
echo utf8_decode($text);
echo '</br>';
echo mb_convert_encoding($text, 'ISO-8859-1', 'UTF-8');
echo '</br>';
echo iconv('UTF-8', 'ISO-8859-1', $text);
echo '</br>';
echo mb_convert_encoding($text, 'UTF-8', 'ISO-8859-1');
结果:
Wies³aw
Wies³aw
Wies³aw
Wies³aw
Wies³aw
Wies?aw
Wies?aw
Wies³aw
期望:
维斯瓦(Wiesław)
答案 0 :(得分:1)
Grrr ..请勿使用任何这些功能。相反,请正确配置MySQL。
好:utf8mb4_unicode_ci
-这是“归类”;它表示CHARACTER SET utf8mb4
。
UTF-8
个字符。 (很明显,您有stoke-l就可以了。)utf8mb4
。建立连接时最好这样做。 PHP具有mysqli
和PDO
。每个的详细信息:http://mysql.rjweb.org/doc.php/charcoll#php CHARACTER SET utf8mb4
。让我们看看SHOW CREATE TABLE
,看看现在是否可以。如果这样做,您会得到
Wiesław -- Mojibake
Wies?aw -- question mark
Wies -- truncation
Wies�aw -- black diamond
然后转到Trouble with UTF-8 characters; what I see is not what I stored以获取更多建议和调试。
十六进制应为57 69 65 73 C582 61 77
。
如果得到57 69 65 73 C385 E2809A 61 77
,则说明您具有“双重编码”。
答案 1 :(得分:0)
如果文本是HTML格式的,则以下命令应该有效:
mb_convert_encoding($text, 'HTML-ENTITIES', 'UTF-8'));
OR
mb_convert_encoding($html, 'HTML-ENTITIES', 'ISO-8859-1'));