Вы можете использовать любую кодировку, какую захотите. Тем не менее, из вашего вопроса звучит, как правило, вы используете UTF-8, но иногда вы получаете данные откуда-то, что поступает с другой кодировкой (например, Internet Explorer, как правило, любит отправлять данные на веб-сервер с использованием ISO- 8859-1).
Если вы собираетесь подавать кодированный в кодировке UTF-8 и откуда-то получаете кодированный не в кодировке UTF-8 текст, его необходимо преобразовать в кодировку UTF-8, прежде чем отправить его по линии. Вероятно, хорошей практикой является автоматическая очистка всех данных, полученных из веб-браузера, и перекодирование их в UTF-8. К сожалению, браузер не всегда говорит вам, какую кодировку он использует; если он не поставляется, вы можете предположить, что это UTF-8 или ISO-8859-1.
Если вы используете язык на стороне сервера, вы захотите узнать, как конвертировать кодировки с этим языком. Например, в PHP есть iconv()
вызовы функций и очень приятная функция mb_detect_encoding($text)
, которая сделает довольно приличную работу, пытаясь угадать, какова кодировка для данного бита данных, когда вы еще не знаете.
Что-то вроде этого было бы по порядку (при условии PHP-серверной части):
$text = iconv(mb_detect_encoding($text), 'UTF-8', $text);
Сделайте это со всеми пользовательскими данными, прежде чем делать с ними что-либо еще (например, используйте array_map для автоматического преобразования пользовательских данных):
function convert_to_utf8($text) {
return iconv(mb_detect_encoding($text), 'UTF-8', $text);
}
$_GET = array_map('convert_to_utf8', $_GET);
$_POST = array_map('convert_to_utf8', $_POST);
Лучше всего определить, предоставляет ли браузер кодировку, и использовать ее в качестве первого аргумента для iconv () вместо mb_detect_encoding.