【问题标题】:Proper handling of foreign characters / emoji正确处理外来字符/表情符号
【发布时间】:2012-08-05 01:57:03
【问题描述】:

无法显示外来字符和表情符号。

编辑澄清

用户在文本字段中键入表情符号字符,然后将其发送到服务器 (php) 并保存到数据库 (mysql) 中。在显示文本时,我们从服务器获取一个 JSON 编码的字符串,在客户端进行解析并显示。

问题:保存在数据库中的“奖杯”表情符号的字符读作

%uD83C%uDFC6

当它被发送回客户端时,我们看不到表情符号图片,我们实际上看到的是原始编码文本。

我们如何让客户端将该文本作为表情符号字符读取并显示图像?

(全部在 iphone / 移动 safari 上)

谢谢!

【问题讨论】:

  • @hakre 很抱歉造成混乱!我已经编辑了这个问题以清楚地说明我的意思。谢谢!
  • 如果这是放入数据库的内容,则管道中的某些内容已损坏,您需要对其进行跟踪以找出原因。另外,utf8mb4.
  • @IgnacioVazquez-Abrams 我刚刚偶然发现了一个关于 utf8 和 utf8mb4 的stackoverflow post,它说 utf8mb4 仅在 MySql 5.5 中可用(我在 5.1 上)。有什么方法可以在 5.1 上做到这一点?
  • @PotatoFro:尝试使用二进制字符串。但是 first 尝试独立于数据库显示该字符。做一个模拟,看看你是否可以用纯文本显示这些表情符号图像。

标签: php javascript mysql unicode emoji


【解决方案1】:

检查您的客户端、Web 服务器和数据库表使用的编码。确保它们都使用可以处理您关心的字符的编码。

【讨论】:

    【解决方案2】:

    看起来问题是我的 MySql 编码... utf8mb4 会允许它 - 不幸的是它在 MySQL v5.5 之前不可用

    【讨论】:

      【解决方案3】:

      数据库中保存的“奖杯”表情符号的字符读取为 %uD83C%uDFC6

      那么你的数据已经被破坏了。 %u 转义特定于 JavaScript escape() 函数,通常不应该使用。确保您的 textarea->PHP 处理使用符合标准的编码,例如 encodeURIComponent,如果您需要在 URL 查询中获取 JS 变量。

      然后,在您的 PHP 层中有适当的原始 UTF-8 字符串,您可以担心让 MySQL 存储基本多语言平面之外的字符,例如表情符号。最好的方法是使用 utf8mb4 排序规则的列;如果这不可用,请尝试二进制列,这将允许您存储任何字节序列(当它返回时将其视为 UTF-8)。但是,这样一来,您将不会进行不区分大小写的比较。

      【讨论】:

      • 真棒...从 escape() 切换到 encodeURIComponent() 一切都很好。似乎 MySQL 5.1 中的“文本”数据类型工作正常。
      猜你喜欢
      • 2016-05-26
      • 2016-10-05
      • 2018-10-02
      • 2016-10-05
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多