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

Как я могу узнать набор символов в $ _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: (добавлено несколько ссылок)

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

  • Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о юникоде и наборах символов (никаких оправданий!)
  • Обработка UTF-8 с помощью PHP

используйте 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.