Как узнать, какую кодировку вводит пользователь в браузер? - PullRequest
0 голосов
/ 30 декабря 2010

Я прочитал статью Джоэла о наборах символов , и поэтому я следую его совету использовать UTF-8 на моей веб-странице и в моей базе данных.Я не могу понять, что делать с пользовательским вводом.Как говорит Джоэл: «Не имеет смысла иметь строку, не зная, какую кодировку она использует».Но как мне узнать, какую кодировку использует пользовательская строка ввода?Если на моей странице есть

<input type="text" name="atextfield" >

, как мне узнать, какую кодировку я получаю от пользователя?Что если пользователь введет какой-то специальный символ ASCII, например, ♣ или ™ или что-то еще?Есть ли какой-то способ определить, что пользовательский ввод дал мне что-то нераспознанное в UTF-8?Есть ли какой-то стандарт для того, как обращаться с такими вещами?

Ответы [ 3 ]

1 голос
/ 30 декабря 2010

Если ваша веб-страница использует UTF-8, браузер конвертирует в UTF-8 для вас.Таким образом, даже специальные символы в ASCII будут представлены как UTF-8.

Однако вы никогда не узнаете зуд руки от пользователя, который переключает кодировку страницы обратно на ISO-8859 - *.

Вы можете использовать на mb_detect_encoding , но не на 100% пуленепробиваемый.

/* Detect character encoding with current detect_order */
echo mb_detect_encoding($str);

/* "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */
echo mb_detect_encoding($str, "auto");

/* Specify encoding_list character encoding by comma separated list */
echo mb_detect_encoding($str, "JIS, eucjp-win, sjis-win");

/* Use array to specify encoding_list  */
$ary[] = "ASCII";
$ary[] = "JIS";
$ary[] = "EUC-JP";
echo mb_detect_encoding($str, $ary);
1 голос
/ 01 января 2011

Не пытайтесь обнаруживать, преобразуйте весь введенный пользователем текст в UTF-8 в вашем приложении.Вы можете сделать все возможное на своей стороне, настроив свой веб-сервер на отправку страниц UTF-8 и заголовков UTF-8, настройте свое приложение для обработки всего текста в UTF-8, настройте файловую систему (при необходимости) для обработки текстовых файлов какUTF-8, настройте базу данных, но у вас просто нет реального контроля со стороны пользователя.Вы можете предложить правильную кодировку символов в ваших HTML-формах, как показано ниже, но на самом деле она не применяется на стороне пользователя:

<form action="/index.php" method="post" accept-charset="UTF-8"></form>

Если только определение кодировки пользовательского ввода не является всей целью вашего приложенияГлупо попробовать.Предположим, что кодировка неверна, и преобразуйте ее в UTF-8 в вашем приложении.Точно так же, как вы должны предположить, что ваш пользовательский ввод является вредоносным, и очистите его, прежде чем пытаться вставить его в свою базу данных.

В большинстве языков, в которых UTF-8 правильно реализован, символы ASCII выживут при преобразовании, так чтоОб этом тоже не стоит беспокоиться.

1 голос
/ 30 декабря 2010

Проверьте HTTP заголовки , чтобы обнаружить кодировку символов.

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