网站上的字符编码有困难

Asked
Viewd259

1

我有一个网站,允许来自世界各地的用户提交个人资料。在存储/检索/显示字符之间的某个位置,它们无法正确呈现。我不确定哪一步出了问题,但这是正在发生的事情的分解。

当我通过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字符集或其他我应该研究的内容,以确保所有内容都能正确显示给我的用户。

3 个答案

3
 * �
* �
* å
 

此模式表示它们首先从UTF-8转换为ISO-8859-1,然后又从ISO-8859-1转换为UTF-8

首先,您的内容类型标头很好。保留它UTF-8

使用ISO-8859-1,在从DB查询数据和将输出发送到响应之间的代码逻辑中的某些内容是错误的。这包括从DB查询数据的步骤。我将从第一步开始。尝试 pg_set_client_encoding 是否有帮助:

 pg_set_client_encoding($connection, 'UTF8');
 

此处一个>。希望这会有所帮助。

  • 感谢您的帮助!正如您所指出的,我需要通过pg_set_client_encoding()设置客户端编码。在那之后,我还不得不更改对htmlentities()的各种调用,以将“ UTF-8”作为第三个参数传递,现在一切看起来都很好。非常感谢!

    Matt HugginsNovember 12, 2009 22:57
1

您可能需要在Postgres中设置客户端编码。 http://developer.postgresql.org/pgdocs/postgres/multibyte.html

此外,您可能必须在HTTP标头中进行操作(而不仅仅是meta标记)。如果您使用的是PHP,则可以致电:

 header("Content-Type: text/html; charset=UTF-8");
 

在读写数据库时,请确保使用相同的客户端编码。

  • 我在询问时忽略了提及,但我使用的是CakePHP框架的内置HtmlHelper :: meta方法,该方法可以帮我完成所有事情。感谢您为遇到此问题并需要在其PHP应用程序中执行此操作的其他人指出这一点。

    Matt HugginsNovember 12, 2009 22:58
0

我猜测问题出在浏览器或Web服务器上-这些UTF-8序列被误读为Latin-1。如果网络服务器发送了一个标为Latin-1的HTTP标头(很多人这样做),它将覆盖文档中的所有内容。Web服务器不需要声明一个字符集(在这种情况下,请查阅文档),或者声明正确的字符集(即UTF-8)。如果不切实际,一种变通方法是在将它们显示为HTML时,对基数0-127 ASCII范围之外的字符使用&#引用。