Php 如何修复两个web客户端之间的字符串长度编码?
我正在构建一个iOS应用程序,其中包括向PHP服务器发送数据 我对字符串Php 如何修复两个web客户端之间的字符串长度编码?,php,ios,utf-8,nsstring,nsstringencoding,Php,Ios,Utf 8,Nsstring,Nsstringencoding,我正在构建一个iOS应用程序,其中包括向PHP服务器发送数据 我对字符串jeremyö中的重音字符有问题,当从以下地址发送时: PHP var_dump将iOS(使用ASIHTTPRequest)检测为string(7)“jeremyö” PHP var_dump检测到来自Firefox或Chrome的数据为string(8)“jeremyö” 当用作登录时,这会破坏我所有的东西 你对我如何处理这种行为有什么建议吗 PHP部分仅为UTF-8(Drupal 7后端),我不知道在iOS上使用的编
jeremyö
中的重音字符有问题,当从以下地址发送时:
- PHP var_dump将iOS(使用ASIHTTPRequest)检测为
string(7)“jeremyö”
- PHP var_dump检测到来自Firefox或Chrome的数据为
string(8)“jeremyö”
Jérémy这听起来更像是unicode规范化,然后是编码。在unicode中,像ö这样的字符可以用两种方式表示。它可以是
U+00F6
(带分划的小o),也可以是两个字符:普通o和组合分划(U+0308)
在iOS上,有一些方法,例如NSString的precomposedStringWithCanonicalMapping
,decomposedStringWithCanonicalMapping
等,允许您在这些不同的表示形式之间转换字符串,php中可能有类似的方法
如果您使用这些字符串作为数据库的查询参数,那么您的数据库可能具有控制字符串相等含义的设置(对于mysql,它是排序规则属性)感谢您的解释。不幸的是,我一直在支持PHP5.2,它没有标准化器类。你可以在iPhone端进行标准化,并检查你的数据库排序设置——你可以完全避免PHP问题。我在iOS端尝试过,但运气不好。我无法处理所有MySQL数据库,因为我的应用程序面向所有Drupal用户:-)