Как узнать набор символов в $_REQUEST? и как установить набор символов $_REQUEST?
Strlen, mb_strlen, который использовать?
Ответ 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.