Во-первых, это будет зависеть от того, имеете ли вы в виду строгий 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";
}
Для всех этих true ASCII-символов нет смысла перекодировать их.
ОДНАКО, если под "ASCII" вы имеете в виду расширенный ASCII (см. здесь ) и говорите о персонажах с акцентами и прочим, то у вас возникают проблемы, потому что там не является определенным набором символов, описанным этим термином .Вы заметите, что в списке поддерживаемых кодировок символов для расширения многобайтовой строки в php есть только одно вхождение аббревиатуры ASCII, и это касается самого ASCII.
Чтобы ответить на ваши вопросы подробнееа именно:
Если я использую функцию mb_convert_encoding () для преобразования строки в кодировке ASCII в PHP в строку в кодировке UTF-8, затем объединяю ее со строкой в кодировке ASCII, какая это кодировка?
Результирующая строка оба ASCII и UTF-8, потому что обе схемы кодирования используют одинаковые байтовые кодировки для этих 128 символов.
Есть ли какие-либо негативные последствия для этого?
Ни при каких обстоятельствах не должно быть никаких негативных последствий, если символы на самом деле true ASCII-символы.
Если, с другой стороны, строки содержат какой-либо акцентированный символ, такой как Å или х , и какой-то неаккуратный кодер вызывает это «расширенный AS»CII "тогда у вас могут быть проблемы.Эти символы имеют разные кодировки, например, в схемах кодирования latin-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 для всего, что вы можете.