Ввод utf-8 - проверить? - PullRequest
       0

Ввод utf-8 - проверить?

1 голос
/ 18 апреля 2011

Никогда не доверяйте вводу.Но это также верно для кодировки символов?Рекомендуется ли контролировать кодирование полученной строки, чтобы избежать непредвиденных ошибок?Некоторые люди используют preg_match для проверки неверной строки.Другие делают контрольный байт для байта, чтобы проверить его.А кто нормализовал с помощью iconv.Какой самый быстрый и безопасный способ сделать эту проверку?

edit

Я заметил, что если я попытаюсь сохранить поврежденную строку utf-8 в моей базе данных mysql,строка будет обрезана без предупреждения.Существуют ли контрмеры для такой возможности?

Ответы [ 3 ]

3 голосов
/ 18 апреля 2011

Рекомендуется ли контролировать кодирование полученной строки во избежание непредвиденных ошибок?

Нет. Не существует надежного способа определения кодировки входящих данных *, поэтому обычной практикой является определение какой кодировки ожидается:

  • Если вы предоставляете какой-либо API или скрипт, который получает запросы от сторонних сайтов, вы обычно указываете в документации, какую кодировку вы ожидаете.

  • Если на вашем сайте есть формы, которые отправляются в сценарии, у вас обычно есть соглашение о том, какой набор символов используется для всего сайта.

Всегда существует вероятность появления поврежденных данных, если заявленная кодировка не соответствует фактической кодировке данных. В этом случае ваше приложение должно быть спроектировано таким образом, чтобы не было ошибок, за исключением того, что персонаж отображается неправильно.

Глядя на кодировку, в которой запрос объявляет входящие данные, как предлагает @Ignacio, это очень интересная идея, но я никогда не видел ее реализованной в мире PHP. Это ничего не говорит против этого, но вы спрашивали о распространенных практиках.

*: - это , часто можно проверить , имеет ли входящие данные определенную кодировку. Например, UTF-8 имеет определенные байтовые значения, которые не могут стоять самостоятельно, но образуют многобайтовый символ. Специальные символы ISO-8859-1 перекрываются с этими значениями и поэтому будут определены как недействительные в UTF-8. Но обнаружение совершенно неизвестной кодировки из произвольного набора данных практически невозможно.

0 голосов
/ 18 апреля 2011

Ваш веб-сайт публикует веб-сервис или создает форму, и вы можете указать, какую кодировку вы ожидаете. Так что, если вход проходит проверку, все в порядке. Если это не так, вам не нужно заботиться, почему это не прошло. Если это произошло из-за неправильной кодировки, это не ваша вина.

0 голосов
/ 18 апреля 2011

Посмотрите на кодировку , указанную в запросе .

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