【问题标题】:Special characters displaying incorrectly with html entities特殊字符在 html 实体中显示不正确
【发布时间】:2012-03-27 10:53:02
【问题描述】:

我在处理从 XML 文件导入的一些数据时遇到问题。不幸的是,我正在使用一些西班牙字符,通常我只是 htmlentites 他们,但它不起作用。

我要显示的示例:

PRCE PEDUCED FROM 1,395,000€

A delightful south facing villa located in Génova

应该是:

PRCE PEDUCED FROM 1,395,000€

A delightful south facing villa located in Génova  (no idea what that should be...)

有什么想法吗?

编辑: 表编码是 utf8_spanish_ci,PHP 目前设置为 ISO-8859-1 作为一项努力。客户端目前是 UTF-8

$text = nl2br($Property->description); 
$trans_text = iconv('UTF-8', 'ISO-8859-15//TRANSLIT//IGNORE', $text);
echo $trans_text;
echo htmlentities($trans_text, ENT_QUOTES, 'ISO-8859-15');

【问题讨论】:

  • 它将一个所需的字符 € 映射到六个字节上?这听起来像是要经历两次转换,可能是 € -(utf8)> e2 82 ac -(??) -> c3 a2 c3 2c c3 ac。
  • 乌尔里希,我希望我明白这一点。我想你是说它被转换了两次,现在是六个字节;不幸的是,这就是它在数据库中的存储方式。我试图弄清楚如何在 HTML 页面上显示它。有什么想法吗?
  • 最好的解决办法是纠正你的导入而不是修正你的输出
  • 嗯。那么事后没有解决方案吗?由于截止日期和导入所需的时间长度,我强烈不希望修复导入...
  • 这可能意味着您在保存文本时和检索文本时都使用 htmlentities() 过滤了文本。如果您通过 htmlentities 运行 €,您将获得该符号的“代码”,并且当您通过 htmlentities 运行该代码时,它将显示类似于您的示例输出的内容

标签: php encoding character-encoding


【解决方案1】:

使用http://www.i18nqa.com/debug/utf8-debug.html上的表我分两步总结:
€ => ‚¬ => €
Génova => Génova => Génova

我相信您可以像这样更新数据库的内容:
UPDATE tablename SET columnname = REPLACE(columnname, '€', '€');

【讨论】:

  • 完美!非常感谢,请问你是怎么做到的?我可能需要再转换大约 10 个字符。 :)
  • 查看表格:Génova 给出 Ã => à 和 © => © 将它们组合成 é => é
  • @CharlesKirk 这对于已经因字符编码问题而搞砸的文本非常有效,但如果是您当前的代码导致它,您的字符将继续返回 € 等。
  • 是的,确保在数据库中插入内容的位置正确设置了编码,并且在更新当前数据库时更好地使用 htmlentities,因此不要将 € 更新为 €但是到 €
【解决方案2】:

检查您的数据库连接字符集...您可能遇到了这个问题:

There are symbols like  and so on in database, what to do?

【讨论】:

  • 感谢您的链接,我已经实现了所有这些,这似乎不是问题。我发布了字面上存储在数据库中的内容,我现在在数据库中使用 utf8_unicode,在其他任何地方使用 utf-8。
猜你喜欢
  • 2014-02-15
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 2015-07-05
  • 2012-03-22
  • 1970-01-01
相关资源
最近更新 更多