Как исправить кодировку длины строки между двумя веб-клиентами? - PullRequest
2 голосов
/ 05 января 2012

Я создаю приложение для iOS, которое, помимо прочего, отправляет данные на сервер PHP.

У меня проблемы с акцентированными символами, например в строке jeremyö, которая при отправке с:

  • iOS (с использованием ASIHTTPRequest) определяется PHP var_dump как string(7) "jeremyö"
  • из Firefox или Chrome как string(8) "jeremyö"

При использовании в качестве логина это ломает все мои вещи.

Есть ли у вас какие-либо подсказки о том, как я могу обойти это поведение?

PHP-часть предназначена только для UTF-8 (бэкэнд Drupal 7), и я не знаю кодировку, используемую в iOS, но я думаю, что это UTF-8 или, может быть, UTF-16.

Спасибо, Жереми

1 Ответ

1 голос
/ 05 января 2012

Это больше похоже на канонизацию юникода, чем на кодирование. В юникоде такой символ, как ö, может быть представлен двумя способами. Это может быть U+00F6 (маленький o с диарезом) или два символа: нормальный o и комбинированный диарез (U + 0308).

В iOS есть такие методы, как NSString precomposedStringWithCanonicalMapping, decomposedStringWithCanonicalMapping и т. Д., Которые позволяют вам конвертировать строки между этими различными представлениями, вероятно, в php есть похожие методы.

Если вы используете эти строки в качестве параметров запроса к вашей базе данных, то ваша база данных, вероятно, имеет настройки, которые определяют, что означает равенство строк (для mysql это свойство collation)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...