如何修复2个web客户端之间的字符串长度编码


How to fix string length encoding between 2 web clients?

我正在构建一个iOS应用程序,它将数据发送到PHP服务器。

我对字符串jeremyö中的重音字符有问题,当从发送时

  • PHP var_dump检测到iOS(使用ASIHTTPRequest)为string(7) "jeremyö"
  • PHP var_dump检测到来自Firefox或Chrome的string(8) "jeremyö"

当用作登录时,这会破坏我所有的东西。

你对我如何处理这种行为有什么建议吗?

PHP部分仅为UTF-8(Drupal7后端),我不知道iOS上使用的编码,但我猜它是UTF-8或UTF-16。

谢谢,Jérémy

这听起来更像是unicode规范化,而不是编码。在unicode中,像ö这样的字符可以用两种方式表示。它可以是U+00F6(带分音符的小o),也可以是两个字符:普通o和组合分音符(U+0308)。

在iOS上,有一些方法,如NSString的precomposedStringWithCanonicalMappingdecomposedStringWithCanonicalMapping等,允许您在这些不同的表示之间转换字符串,php中可能也有类似的方法。

如果您使用这些字符串作为数据库的查询参数,那么您的数据库可能具有控制字符串相等性的设置(对于mysql,这是排序规则属性)