我有一个网站,允许来自世界各地的用户提交个人资料。在存储/检索/显示字符之间的某处,它们无法正确呈现。我不确定哪个步骤存在问题,但这是对正在发生的事情的细分。
当我通过psql命令行界面从我的PostgreSQL数据库中执行SELECT时,我看到一些字符如下面出现,这让我相信它们正确保存:
但是,在我的网站上,我看到上面的字符分别如下所示:
我试过更改标题中的编码,没有运气,来自:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
为:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
我只是想要了解任何PHP设置/功能,PostgreSQL设置,HTML字符集或其他任何我应该查看的内容,以确保所有内容都能正确显示给我的用户。
答案 0 :(得分:3)
* �
* �
* å
此模式表示它们首先从UTF-8
转换为ISO-8859-1
,然后再从ISO-8859-1
转换为UTF-8
。
首先,你的内容类型标题很好。保持UTF-8
。
在查询来自数据库的数据并将输出发送到响应之间的代码逻辑中的某些内容错误地使用ISO-8859-1
。这包括从DB查询数据的步骤。我先从第一步开始。尝试pg_set_client_encoding
有帮助:
pg_set_client_encoding($connection, 'UTF8');
其他步骤描述为here。希望这会有所帮助。
答案 1 :(得分:1)
您可能需要在Postgres中设置客户端编码。 http://developer.postgresql.org/pgdocs/postgres/multibyte.html
此外,您可能必须在HTTP标头中执行此操作(而不仅仅是元标记)。如果您使用的是PHP,请致电:
header("Content-Type: text/html; charset=UTF-8");
在读取和写入db时,请务必使用相同的客户端编码。
答案 2 :(得分:0)
我猜测问题出现在浏览器或网络服务器中 - 那些是UTF-8序列被误读为Latin-1。如果Web服务器发送标记为Latin-1的HTTP标头,许多人会这样做,它会覆盖文档中的任何内容。 Web服务器需要不声明字符集(在这种情况下查询文档),或声明正确的字符集(UTF-8)。如果这是不切实际的,解决方法是在将它们作为HTML呈现时,对基数0-127 ASCII范围之外的字符使用&amp; #reference。