php页面脚本上的czechchar'ě'

时间:2010-04-26 15:23:38

标签: php character-encoding iso-8859-2

我无法在我的网页上正确显示此字符。我在这个页面使用UTF-8字符集,让我使用ISO-8859-2吗?我从数据库中获取这个带有此char的字符串,并将其保存为ě。我的浏览器只显示html标签。

这是我唯一无法在我的网页上显示的字符(此刻)。我看一下http://www.czech.cz并使用UTF-8。

有什么建议吗?

小心! 安德烈

2 个答案:

答案 0 :(得分:1)

您是在浏览器中看到ě,还是在查看来源时?如果你在浏览器中看到它,那么它可能在某处被双重编码 - 无论它输出到页面的任何输出都可能将其检测为未编码的HTML并试图保护您免受某种HTML注入。你会想让它不那样做。但是你有一个更深层次的问题。如果您的页面以UTF-8格式提供,并且您的数据是UTF-8,那么首先没有任何理由将其转换为HTML实体。您应该通过UTF-8数据。你需要切换到不同的字符编码。

答案 1 :(得分:1)

首先,是的,你真的应该使用UTF-8。但这并不意味着您拥有的数据已经是UTF-8编码。

其次,听起来这个字符在数据库已经中是HTML编码的。这是一个问题,因为似乎任何显示此字符的页面也会尝试对内容进行HTML编码。这是我正在谈论的一个例子。

来自用户的数据:ě
在进入数据库之前对数据进行HTML编码(通过htmlentities()):ě
存储在DB中的数据:ě
从DB中检索的数据:ě
在打印到页面之前编码的数据HTML:ě
浏览器中显示的数据:ě

你知道吗?该字符变为双重编码,因此在第二个编码步骤中,&符号将转换为实体本身。

在将数据存储到数据库之前,这是HTML编码数据的问题。这应该只在显示内容之前完成,而不是在存储之前完成。