Как я могу узнать набор символов в $ _REQUEST? и как установить набор символов $ _REQUEST?
Короче говоря: вы действительно не знаете о кодировке (наборе символов), используемой для переменных, которые передаются вашему скрипту PHP через 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) во всех переменных, которые передаются в вашу строку (мы не говорим о сценариях роужа, которые намеренно пытаются испортить кодировку, чтобы в сценарии были включены некоторые векторы атаки). Вы также не должны полагаться на не-ascii-символы в ваших параметрах GET или в URL-адресе (это также является причиной того, почему ссылки, ориентированные на SEO, удаляют эти символы или заменяют их).
Если вы убедитесь, что UTF-8 является единственным разрешенным набором символов, вы можете использовать mb_strlen($string, 'UTF-8')
чтобы проверить длину переменной, например.
EDIT: (добавлено несколько ссылок)
Некоторые вещи для вас:
используйте mb_internal_encoding, чтобы узнать, какая кодировка установлена. Если вы используете журнал с различной кодировкой, вам лучше использовать mb_strlen.
ура
Обычно вы управляете кодировкой символов, так как вы создаете $ _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.