【问题标题】:Production-only bug: em dashes not appearing correctly仅生产错误:破折号未正确显示
【发布时间】:2015-07-27 15:28:21
【问题描述】:

我遇到了无法解决的破折号问题。对于我们的站点,我们将文本内容存储在 MySQL 数据库的“内容”列中,该列偶尔会包含特殊字符,除了 em dash 之外,所有这些都正确显示。在网站上打印出来时,输入文本中的任何破折号都会变成问号菱形替换字符。

该错误仅出现在我们的生产站点上(在我们的开发站点和登台站点上,emdashes 正确呈现),这使我相信这可能是它们各自数据库上的字符集问题(我们的开发/登台数据库是托管在一台服务器上,生产在另一台服务器上)。但是,包含相关文本内容的列在所有数据库上都设置为 utf-8。将输出包装在 htmlspecialchars() 中不起作用。

值得注意的是,当我使用 print_r() 打印保存获取的数据库结果(用于调试)的变量时,在下面打印出来时,破折号将正确呈现。

【问题讨论】:

  • 检查网页编码(来自meta标签)、php脚本文件编码和mysql驱动编码是否匹配。
  • 你试过—而不是 — ?
  • 我们在破折号上遇到了同样的问题,事实证明,用户从具有特殊破折号(稍长)的单词中复制/粘贴,并且生产中的 mysql 编码不接受它。我们通过创建带有一些例外的转义函数解决了这个问题
  • UTF-8 all the way through 的可能重复项
  • 嗨@ClaudioPinto,我们可能会做类似的事情,因为我们的问题也可能是由用户从 Word 复制/粘贴造成的。您能否提供有关您制作的功能的更多详细信息?它是否搜索并替换了 Word dash?感谢您和大家的快速回复。

标签: php mysql ascii production-environment


【解决方案1】:

感谢所有回复的人,已通过UTF-8 all the way through 中的 SET NAMES 'utf8' 解决方案修复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2014-05-14
    • 2016-09-10
    相关资源
    最近更新 更多