✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Як конвертувати GB2312 (або інші символи, що не належать до ANSI) у кодування UTF-8 (як MySQL, так і Files Charset)

35

Мій перший веб-сайт steakovercooked.com був створений у 2006 році (9 років тому). У той час я не знав багато про кодування/набір символів файлів, а також UTF-8 не був таким популярним для веб-сторінок у той час. У ці дні UTF-8 стає настільки популярним, тобто WordPress використовує кодування UTF-8 на всьому сайті, щоб ви могли практично відображати будь-яку мову на одному сайті без проблем.

Як конвертувати GB2312 (або інші символи, що не належать до ANSI) у кодування UTF-8 (як MySQL, так і Files Charset)

UTF-8-ascii-iso-8859-1

Кодова сторінка всіх файлів (PHP, HTML, CSS та деяких інших простих текстових файлів) була здебільшого на кодових сторінках ANSI, а китайські ієрогліфи закодовані багатобайтно. Щоб відображати ці символи (у кодуванні ANSI) у браузері, вам потрібно буде розмістити їх між тегами заголовків у HTML, щоб браузери могли зрозуміти:

У HTML5 ви можете писати набагато коротшим методом:

Таким чином, більшість людей, які не розмовляють китайською мовою, не можуть бачити символи, якщо вони не інсталюють мовний пакет GB2312 для браузера. Крім того, деякі звичайні текстові редактори можуть зіпсувати символи. Один символ у китайській мові складається з двох байтів, але іноді текстовий редактор просто розрізає його навпіл.

Перетворення файлів (ANSI) на UTF-8

Перш ніж змінити метазаголовок на:

Вам потрібно буде конвертувати файли в кодування UTF-8. Є багато способів зробити це. Найпростішим способом буде використання блокнота для збереження в кодуванні UTF-8.

Як конвертувати GB2312 (або інші символи, що не належать до ANSI) у кодування UTF-8 (як MySQL, так і Files Charset)

notepad-convert-to-utf-8

Якщо у вас багато файлів, ви можете зробити це за допомогою утиліти iconv у Linux (сервер VPS ). Наступний сценарій (збережений у імені файлу, наприклад, toUTF) перетворить один файл на UTF-8.

#!/bin/bash # https://helloacm.com   if [ "$#" -ne 1 ] ||! [ -r "$1" ]; then     echo "Usage: $0 file1"     exit 1 fi   x=`file -bi $1 | grep 'utf' | wc -l` if [ $x -eq 1 ]; then   echo "$1 already converted" else   echo converting $1 to UTF8   iconv -f "gb2312" -t "UTF-8" $1 -o $1 fi

Нам потрібно уникати подвійного перетворення, щоб запобігти можливим проблемам. Перевірить, file -bi $1 | grep 'utf' | wc -lчи файл уже закодовано UTF-8. Команда iconv -f “gb2312" -t “UTF-8" $1 -o $1 перетворить файл у UTF-8 із gb2132 (змініть це відповідно).

Тепер ми можемо зациклювати всі файли з розширенням *.php у поточному каталозі та всіх підкаталогах:

for x in `find. -type f -name "*.php"`; do toUTF $x done

Перетворення бази даних MySQL на UTF-8

У моєму випадку вся моя попередня база даних mysql за замовчуванням використовує кодування ANSI (зіставлення latin1_swedish_ci ). У сучасних браузерах вона пошкоджується, якщо є символи GB2312 (багатобайтові). Наприклад, PhpMyAdmin має кодування UTF-8, а символи ANSI/GB2312 у браузері відображатимуться пошкодженими.

Щоб зберегти ці дані в UTF-8, найпростішим способом є експорт таблиці (рекомендується phpMyAdmin) у файл SQL; переконайтеся, що ви експортуєте його за допомогою iso 8859-1 (повне покриття англійської мови). iso 8859-1 також відомий як ANSI, але символи GB2312 можна зберігати як багатобайтовий рядок. Якщо ви відкриєте SQL у блокноті, ви все одно зможете побачити китайські ієрогліфи, вам просто потрібно зберегти як кодування "UTF-8".

Як конвертувати GB2312 (або інші символи, що не належать до ANSI) у кодування UTF-8 (як MySQL, так і Files Charset)

phpmyadmin

О, ще одна річ перед збереженням як UTF-8. Ви повинні виконати пошук і замінити слово «latin1» на «utf-8» у файлі SQL. Потім повторно імпортуйте SQL за допомогою phpMyAdmin, щоб усе було готово. Усі дані буде збережено та змінено на кодування UTF-8, а порівняння буде змінено (для varchar, text, longtext тощо) на utf8_general_ci.

Налаштування MySQL UTF-8

У PHP ви можете встановити кодування за замовчуванням:

  mysql_query("SET NAMES 'utf8'");   mysql_query("SET CHARACTER SET utf8");

mysql_set_charset робить аналогічно:

Ви також можете встановити набір кодів за замовчуванням під час запуску сервера MySQL (збережіть накладні витрати на виклик вищезгаданих функцій). Перейдіть до редагування файлу /etc/mysql/my.cnf і перезапустіть сервер mysql, наприклад sudo service mysql restart. Додайте наступне до my.cnf :

[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8

Чому UTF-8?

UTF-8 обробляє букви алфавіту 1 байтом (те саме, що й ANSI), але використовує 3 байти для представлення 1 китайського символу, тоді як 2 байти використовуються, якщо кодується GB2312. Таким чином, якщо ваші сторінки містять багато китайських ієрогліфів, тоді ANSI/GB2312 економить простір, однак UTF-8 і ANSI займають рівно стільки ж місця, коли йдеться лише про англійські літери.

UTF-8 позбавляє вас проблем у майбутньому. Після перетворення на UTF-8 вам не доведеться турбуватися про кодування чи кодування. UTF-8 є більш сприятливим для міжнародних символів, оскільки більшість браузерів знають, як правильно відображати текст. У моєму випадку мені потрібно конвертувати файли в кодування UTF-8, оскільки мої улюблені текстові редактори PsPAD і Sublime text не знають, як правильно відображати ANSI/GB2312.

Джерело запису: helloacm.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі