Strlen, mb_strlen, который использовать?

Как узнать набор символов в $_REQUEST? и как установить набор символов $_REQUEST?

Ответы

Ответ 1

Чтобы сделать это коротко: вы действительно не знаете о кодировке (наборе символов), используемой для переменных, которые передаются на ваш PHP script через GET или POST (особенно GET - проблема здесь). По соглашениям браузеров POST формирует серверный ресурс, указанный в атрибуте action, используя кодировку страницы, которая может быть указана с помощью тега http-equiv -meta-тега (charset -meta-tag в HTML5) или через HTTP-заголовок. В качестве альтернативы, некоторые браузеры также уважают атрибут accept-charset в форме при правильном кодировании.

Кодирование параметров GET и самого URL-адреса зависит от настроек браузера и, следовательно, может контролироваться пользователем. Вы не должны полагаться на определенную кодировку.

Как правило, вы обойдете большинство проблем, связанных с кодированием, последовательно используя UTF-8 для всего и указав правильную кодировку в HTTP-заголовке (Content-Type: text/html; charset=UTF-8) - это даст правильную кодировку (UTF-8) в все переменные, которые передаются в вашу строку (мы не говорим о руожских сценариях, которые намеренно пытаются испортить кодировку, чтобы позволить некоторым векторам атаки в ваш script). Вы также не должны полагаться на не-ascii-символы в ваших параметрах GET или в URL-адресе (что также является причиной того, почему SEO-дружественные ссылки удаляют эти символы или заменяют их).

Если вы убедитесь, что UTF-8 является единственным разрешенным набором символов, вы можете использовать mb_strlen($string, 'UTF-8') для проверки длины переменной, например.

EDIT: (добавлено несколько ссылок)

Некоторые вещи для вас:

Ответ 2

используйте mb_internal_encoding, чтобы узнать, какая кодировка установлена ​​в данный момент. Если приложение использует журнал различной кодировки, вам лучше использовать mb_strlen.

Приветствия

Ответ 3

Обычно вы управляете кодировкой символов, так как вы создаете $_REQUEST из HTML-кода, отправляемого клиенту.

т.е.: он генерируется страницей, отправленной с PHP.

Таким образом, вам не нужно обнаруживать кодировку.

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

header('Content-Type: text/html; charset=UTF-8');

ИЛИ в HTML:

<meta charset="utf-8">

http://www.w3.org/International/O-charset

Изменить: PHP6 поддерживает utf-8, а не PHP5.