2010-04-26 15 views
1

我无法在我的网页上正确显示此字符。我在这个页面上使用UTF-8字符集,我是否使用ISO-8859-2?我得到这个字符串与这个来自数据库的字符,并保存为ě。我的浏览器只显示html标签。php页面脚本中的捷克字符'ě'

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

有什么建议吗?

保重! Andrea

+0

如何链接到您的网页? – 2010-04-26 15:25:08

+0

http://www.fornacigrigolin.it/cz/ProdottiFamiglia.php?id_cat=2 – 2010-04-26 15:36:14

回答

1

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

+0

这是我的浏览器,它无法翻译'&@ 283;'的代码。还有一个问题。我有一个管理页面上传数据库的字符串,并且在更新数据库之前,我打电话给$ text = htmlentities($ text,ENT_QUOTES);.对于所有其他语言都是正确的,但不是这个字符..... – 2010-04-26 15:38:45

+1

使用'htmlspecialchars' **而不是**'htmlentities'。 'htmlentities'尝试对所有非A​​SCII字符进行编码,这是不必要的,如果不告诉它正确的字符集,将会破坏它们。它默认使用旧的ISO-8859-1。 – bobince 2010-04-26 15:49:15

1

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

其次,听起来这个字符是HTML编码在数据库已经。这是一个问题,因为无论页面是否显示此字符尝试对内容进行HTML编码。这是我正在谈论的一个例子。 ě
数据HTML编码(经由htmlentities())进入DB之前:存储在DB ě
数据:从DB中检索ě
数据:ě
数据HTML编码被打印到之前

从用户

数据页面:ě
在浏览器中看到的数据:ě

你看到了吗?该字符变成双编码,因此在第二编码步骤中,和号字符被转换成实体本身。

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

+0

你是男人!这正是问题.....所以,我必须先删除htmlentities(),然后才能将其转换为DB,是吗? – 2010-04-26 15:44:28

+0

但不清楚为什么在db我有这个“Vrchní omí tky a vyrovná vac&ia”。并且它正确显示在我的浏览器中... – 2010-04-26 15:46:43

+0

在将文本输出到HTML页面时,您应该使用'htmlspecialchars',并且'htmlentities'永远不会。不要HTML转义内容进入数据库。 – bobince 2010-04-26 15:50:34