Какая кодировка является результирующей строкой, если я конкатенирую строку в кодировке UTF-8 со строкой ASCII в PHP?

Если я использую функцию mb_convert_encoding() преобразовать ASCII-кодированную строку в PHP в строку UTF-8, а затем объединить ее с ASCII-кодированной строкой, что это за кодировка? Есть ли какие-либо негативные последствия для этого?

1

Решение

Это будет зависеть в первую очередь от того, имеете ли вы в виду строгий ASCII, который включает в себя только 128 символов. Каждый из этих символов имеет ту же самую кодировку в схеме кодирования ASCII, что и в Схема кодирования UTF-8. Для этих символов функция mb_convert_encoding не будет иметь никакого эффекта. Вы можете легко проверить это самостоятельно с помощью этого скрипта:

/* Convert ASCII to UTF-8 */
for ($i=0; $i<128; $i++) {
$str1 = chr($i);
$str2 = mb_convert_encoding($str1, "UTF-8", "ASCII");

echo $str1 . " - " . $str2 . " - ";

if ($str1 !== $str2) {
echo " - DIFFERENT!";
} else {
echo " - same";
}
echo "\n";
}

Для всех этих правда Символы ASCII, нет смысла их перекодировать.

ТЕМ НЕ МЕНИЕ, если под «ASCII» вы имеете в виду расширенный ASCII (увидеть Вот) и говорить о персонажах с акцентами и прочее, то вы попадаете в неприятности, потому что там нет определенного набора символов, описанного этим термином. Вы заметите, что в список поддерживаемых кодировок символов для расширения многобайтовой строки php существует только одно вхождение аббревиатуры ASCII, и это касается самого ASCII.

Чтобы ответить на ваши вопросы более точно:

Если я использую функцию mb_convert_encoding () для преобразования строки в кодировке ASCII в PHP в строку в кодировке UTF-8, а затем соединяю ее со строкой в ​​кодировке ASCII, какая это кодировка?

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

Есть ли какие-либо негативные последствия для этого?

Ни при каких обстоятельствах не должно быть никаких негативных последствий, если персонажи на самом деле правда Символы ASCII.

Если, с другой стороны, строки содержат некоторые акцентированные символы, такие как Å или же õ и какой-то неаккуратный кодер вызывает этот «расширенный ASCII», тогда у вас могут возникнуть проблемы. Эти символы имеют разные кодировки в латино-1 и схемы кодирования UTF-8, например.

Попробуйте взглянуть на эту функцию PHP, и это может расшатать некоторое понимание. Спросите себя, что это значит преобразовать символ, не являющийся ASCII, из ASCII в UTF-8. Это не значимое преобразование, но оно приводит к изменению в этом конкретном сценарии:

$chars = array("Å", "õ");
foreach ($chars as $char) {
echo $char . " : ";
$str1 = mb_convert_encoding($str1, "UTF-8", "ASCII");
$str2 = mb_convert_encoding($str1, "UTF-8", "ISO-8859-1");
echo $str1 . " - " . $str2 . " - ";

if ($char !== $str1) {
echo " - ASCII DIFFERENT";
}
if ($char !== $str2) {
echo " - LATIN 1 DIFFERENT";
}
echo "\n";
}

Вы можете начать путаться в этой точке. Возможно, вам будет полезно узнать, что мой PHP-код в этой последней функции своя собственная кодировка который на моей рабочей станции оказывается utf-8. Поэтому эти преобразования, которые я выполнил, довольно глупы. Я лгу PHP, говоря, что эти строки UTF-8 являются ASCII или Latin-1, и прошу PHP преобразовать их в UTF-8. Он выполняет преобразование как можно лучше, но мы все знаем, что преобразование не имеет смысла.

Я надеюсь, что вы можете оценить то, что я получаю здесь. Каждый раз, когда вы видите символ на компьютере, он имеет некоторую кодировку. Существуют ли какие-либо негативные последствия, будет зависеть от того, как вы относитесь к поступающим вам данным, какие преобразования вы выполняете с ними и что вы намерены делать с ними позже.

Полезно подумать о цепочке поставок. Откуда ваши данные? Какую кодировку они использовали? Это то, что я использую в моей системе? Куда я отправляю эти данные? Нужно ли конвертировать? Вы также должны быть осторожны, чтобы указывать наборы символов для всех этих вещей:

  • данные, которые вы получаете от клиентов
  • Форма представления на ваш сайт
  • отображение html на вашем сайте
  • операции над текстовыми строками в ваших приложениях
  • кодировка символов вашего соединения с базой данных, кодировка символов таблиц в вашей базе данных и кодировки столбцов в этих таблицах
  • кодировка символов хранимых данных
  • кодировка символов электронной почты
  • кодировка символов данных, переданных в API

И так далее.

Общее правило: используйте utf-8 для всего, что только возможно.

3

Другие решения

ASCII является подмножеством UTF-8, поэтому строка ASCII является допустимой строкой UTF-8. Конкатенация двух строк UTF-8 однозначна.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector