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

时间:2012-01-04 20:14:42

标签: php ios utf-8 nsstring nsstringencoding

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

我遇到了字符串jeremyö中的重音字符问题,这些字符来自:

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

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

您对我如何解决此问题有任何暗示吗?

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

谢谢, 的Jérémy

1 个答案:

答案 0 :(得分:1)

这听起来更像是unicode规范化然后编码。在unicode中,像ö这样的角色可以用两种方式表示。它可以是U+00F6(带有分音符的小o)或者它可以是两个字符:正常o和组合分音符(U + 0308)。

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

如果您使用这些字符串作为数据库的查询参数,那么您的数据库可能具有控制字符串相等意味着什么的设置(对于mysql,它是collat​​ion属性)