【问题标题】:Certain characters causing crash in a web services iPhone app using PHP MySQL & XML某些字符导致使用 PHP MySQL 和 XML 的 Web 服务 iPhone 应用程序崩溃
【发布时间】:2012-05-02 23:39:25
【问题描述】:

我们有一个实时网络服务 iPhone 应用程序,其中来自服务器的内容从 MySQL 表中读取(类型:MyISAM;排序规则:latin1_swedish_ci),然后通过 PHP 通过 XML 发送。

直到昨天我们需要支持◉字符之前一切都运行良好。

在我们的 PHP 中的 XML 行中我们改变了

$xml_output = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";

$xml_output = "<?xml version=\"1.0\"?>\n";

瞧,随着那个角色,该应用开始支持表情符号和国际语言!

但问题是......现在当内容包含某些特定字符时,应用程序崩溃,我们无法检测到这些字符。

例如:当 MySQL 字段有这个 'â¤ðŸ'~ðŸ'UserFoo🌹â™' 字符串时,应用程序崩溃。 这个例子中奇怪的字符应该是一些表情符号字符。

我相信这是一些与编码相关的问题,但不知道如何设置它 - 从使用 PHP 插入到表中然后通过 XML 获取。

如何设置整个流程?此外,如果您可以为初学者提供一些资源,该资源可以描述整个事物并支持表情符号,那将是非常棒的。

PS:我阅读了this question 并遵循了建议,但还无法修复。

【问题讨论】:

  • 究竟是什么崩溃了?如果是应用程序,这可能与 PHP 完全无关。
  • 应用程序崩溃..但它与字符有关,好像我只是在 xml 行中恢复上述更改,不会发生崩溃但字符显示很奇怪。
  • 我会恢复编码属性,也许试试: $xml_output = "\n";
  • @BufferStack:这清楚地表明应用程序崩溃是可远程利用的,但并不是远程数据是导致崩溃的原因。崩溃只能是内部的,不能是外部的。崩溃只会使您的应用程序中的缺陷可见。您现在应该先集中精力修复缺陷,然后再做任何其他事情。很高兴您找到了这个并且您已经知道如何重现崩溃!
  • @hakre:谢谢,但崩溃与上述问题有关。我可以解决编码问题,然后崩溃也得到修复。我无法理解我应该在应用程序方面做些什么改变?!

标签: php iphone mysql xml character-encoding


【解决方案1】:

我认为您应该首先尝试将您的数据库和表编码更改为“utf8_general_ci”。

然后您应该在您的 MySQL 连接上运行 SET NAMES 'utf8'。这很重要,因此所有客户端通信都以 unicode 进行。

然后当你编写你的 XML 时,设置<?xml version="1.0" encoding="UTF-8"?>

如果以上方法都不起作用,我建议您同时检查您的 iPhone 代码和配置,以确保支持特殊字符。

希望对你有帮助!

【讨论】:

【解决方案2】:

您还应该知道,大多数表情符号字符是使用 4 字节 UTF8 代码点编码的,除非您升级到 5.5 版并将表转换为 utf8mb4 字符集,否则无法将其存储在 MySQL 中。

参考:How to insert utf-8 mb4 character(emoji in ios5) in mysql?

我猜您的应用程序正在崩溃,因为 XML 解析器遇到了无效字符。由于您正在进行的编码转换,可能会出现无效字符。如果您将服务器端的所有内容都转换为 UTF8,它可能会解决问题,但如果您接受用户输入,那么您还需要清理输入以确保它是有效的 UTF8。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2014-09-23
    • 2023-04-04
    相关资源
    最近更新 更多