如何用PHP解码MySQL文本?

时间:2019-05-15 23:06:05

标签: php mysql encoding character-encoding

在此示例中,如何从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)

2 个答案:

答案 0 :(得分:1)

Grrr ..请勿使用任何这些功能。相反,请正确配置MySQL。

好:utf8mb4_unicode_ci-这是“归类”;它表示CHARACTER SET utf8mb4

  • 客户端中有UTF-8个字符。 (很明显,您有stoke-l就可以了。)
  • 告诉MySQL客户端正在使用utf8mb4。建立连接时最好这样做。 PHP具有mysqliPDO。每个的详细信息: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'));