GB2312:n (tai muiden ei-ANSI-merkkien) muuntaminen UTF-8-koodaukseksi (sekä MySQL- että tiedostomerkkisarja)
Ensimmäinen verkkosivustoni steakovercooked.com aloitti toimintansa vuonna 2006 (9 vuotta sitten). Ja tuolloin en tiennyt paljoakaan tiedostojen koodauksesta/merkkisarjasta, ja myös UTF-8 ei ollut niin suosittu web-sivuilla tuolloin. Näinä päivinä UTF-8:sta tulee niin suosittu, eli WordPress käyttää UTF-8-koodausta koko sivustolla, jotta voit käytännössä näyttää minkä tahansa kielen yhdellä sivustolla ilman ongelmia.
UTF-8-ascii-iso-8859-1
Kaikkien tiedostojen (PHP, HTML, CSS ja eräät muut pelkkää tekstitiedostot) koodisivut olivat pääosin ANSI-koodisivuilla ja kiinalaiset merkit ovat monitavuisia. Jos haluat näyttää nämä merkit (ANSI-koodauksella) selaimessa, sinun on asetettava ne otsikkotunnisteiden väliin HTML:ssä, jotta selaimet ymmärtävät:
HTML5:ssä voit kirjoittaa paljon lyhyemmällä menetelmällä:
Joten useimmat muut kuin kiinalaiset eivät näe merkkejä, elleivät he asenna GB2312-kielipakettia selaimeen. On myös todennäköistä, että jotkut yleiset tekstieditorit sotkevat hahmoja. Kiinassa yksi merkki on kaksi tavua, mutta joskus tekstieditori vain leikkaa puoliksi.
Muunna tiedostot (ANSI) UTF-8:ksi
Ennen kuin muutat metaotsikon muotoon:
Sinun on muutettava tiedostot UTF-8-koodaukseen. On monia tapoja tehdä se. Yksinkertaisin tapa olisi tallentaa muistiin UTF-8-koodauksella.
notepad-convert-to-utf-8
Jos sinulla on paljon tiedostoja, voit tehdä tämän käyttämällä iconv -apuohjelmaa Linuxissa (VPS Server ). Seuraava komentosarja (tallennettu tiedostonimeen esim. toUTF) muuntaa yhden tiedoston UTF-8:ksi.
#!/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
Meidän on vältettävä muuntamista kahdesti mahdollisten ongelmien välttämiseksi. file -bi $1 | grep 'utf' | wc -l
Tarkistaa, onko tiedosto jo UTF-8-koodattu. Komento iconv -f "gb2312" -t "UTF-8" $1 -o $1 muuntaa tiedoston UTF-8 muotoon gb2132:sta (muuta tätä vastaavasti).
Nyt voimme silmukoida kaikki tiedostot, joiden tiedostotunniste on *.php nykyisessä hakemistossa ja kaikissa alihakemistoissa:
for x in `find. -type f -name "*.php"`; do
toUTF $x
done
Muunna MySQL-tietokanta UTF-8:ksi
Minun tapauksessani kaikki aiemmat mysql-tietokantani ovat oletusarvoisesti ANSI-koodattuja (latin1_swedish_ci- lajittelu), se vioittuu nykyaikaisissa selaimissa, jos siinä on GB2312-merkkejä (monitavu). Esimerkiksi PhpMyAdminissa on UTF-8-koodaus ja ANSI/GB2312-merkit näkyvät vioittuneina selaimessa.
Näiden tietojen tallentamiseksi UTF-8:aan helpoin tapa on viedä taulukko (suositus on phpMyAdmin) SQL-tiedostoon. varmista, että viet sen käyttämällä ISO 8859-1 -standardia (täysi englanninkielinen kattavuus). iso 8859-1 tunnetaan myös nimellä ANSI, mutta GB2312-merkit voidaan tallentaa monitavuisena merkkijonona. Jos avaat SQL:n Notepadissa, näet silti kiinalaiset merkit, sinun tarvitsee vain tallentaa UTF-8-koodauksella.
phpmyadmin
Voi, vielä yksi asia ennen tallentamista UTF-8-muodossa. Sinun tulee etsiä ja korvata sana "latin1" sanalla "utf-8" SQL-tiedostossa. Tuo sitten SQL uudelleen phpMyAdminilla, jotta olet valmis. Kaikki tiedot säilytetään ja muutetaan UTF-8-koodaukseen ja lajittelu muutetaan (varchar, teksti, longtext jne.) muotoon utf8_general_ci.
MySQL UTF-8 -asetukset
PHP:ssä voit asettaa oletusmerkkijoukon:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
Mysql_set_charset toimii samalla tavalla:
Voit myös asettaa oletusmerkkijoukon, kun MySQL-palvelin käynnistyy (tallentaa funktion yleiskulut yllä olevien funktioiden kutsumista varten). Siirry muokkaamaan tiedostoa /etc/mysql/my.cnf ja käynnistä mysql-palvelin uudelleen esim. sudo service mysql restart. Lisää my.cnf :ään seuraava :
[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
Miksi UTF-8?
UTF-8 käsittelee aakkoskirjaimia 1 tavua (sama ANSI:lle), mutta käyttää 3 tavua edustamaan yhtä kiinalaista merkkiä, kun taas 2 tavua käytetään, jos ne on koodattu GB2312:lla. Siksi, jos sivuillasi on paljon kiinalaisia merkkejä, ANSI/GB2312 säästää tilaa, mutta UTF-8 ja ANSI kuluttavat täsmälleen saman tilan, kun on kyse vain englanninkielisistä kirjaimista.
UTF-8 säästää ongelmia tulevaisuudessa. Kun olet muuntanut UTF-8:aan, sinun ei tarvitse huolehtia merkistöstä tai koodauksesta. UTF-8 on kansainvälisesti merkkiystävällisempi, että useimmat selaimet osaavat näyttää tekstin oikein. Minun tapauksessani minun on muutettava tiedostot UTF-8-koodatuksi, koska suosikkitekstieditorini sekä PsPAD että Sublime text eivät osaa näyttää ANSI/GB2312:ta oikein.