✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Hur man konverterar GB2312 (eller andra icke-ANSI-tecken) till UTF-8-kodning (både MySQL och Files Charset)

16

Min första webbplats steakovercooked.com startade 2006 (9 år sedan). Och på den tiden visste jag inte mycket om filkodning/teckenuppsättning och dessutom var UTF-8 inte så populärt för webbsidor på den tiden. Nuförtiden blir UTF-8 så populär, dvs. WordPress använder UTF-8-kodning genom hela webbplatsen så att du praktiskt taget kan visa vilket språk som helst på en webbplats utan problem.

Hur man konverterar GB2312 (eller andra icke-ANSI-tecken) till UTF-8-kodning (både MySQL och Files Charset)

UTF-8-ascii-iso-8859-1

Kodsidan för alla filer (PHP, HTML, CSS och några andra vanliga textfiler) var mestadels på ANSI-kodsidor och de kinesiska tecknen är multi-byte-kodade. För att visa dessa tecken (i ANSI-kodning) i webbläsaren, skulle du behöva lägga dessa mellan header-taggen i HTML så att webbläsare kan förstå:

I HTML5 kan du skriva på en mycket kortare metod:

Så de flesta icke-kinesisktalande kan inte se tecknen om de inte installerar språkpaketet GB2312 för webbläsaren. Det är också troligt att vissa vanliga textredigerare krånglar till karaktärerna. Ett enstaka tecken på kinesiska är två byte men ibland skär textredigeraren bara i halvor.

Konvertera filer (ANSI) till UTF-8

Innan du ändrar metahuvudet till:

Du skulle behöva konvertera filerna till UTF-8-kodning. Det finns många sätt att göra det på. Den enklaste metoden skulle vara att använda anteckningsblock för att spara som ‘UTF-8’-kodning.

Hur man konverterar GB2312 (eller andra icke-ANSI-tecken) till UTF-8-kodning (både MySQL och Files Charset)

notepad-convert-to-utf-8

Om du har många filer kan du göra detta med hjälp av iconv -verktyget på Linux (VPS Server ). Följande skript (sparat till filnamn t.ex. toUTF) kommer att konvertera en enda fil till 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

Vi måste undvika att konvertera två gånger för att förhindra eventuella problem. Den file -bi $1 | grep 'utf' | wc -lkommer att kontrollera om filen redan har UTF-8-kodad. Kommandot iconv -f "gb2312" -t "UTF-8" $1 -o $1 kommer att konvertera filen till UTF-8 från gb2132 (ändra detta i enlighet med detta).

Nu kan vi loopa alla filer med *.php filtillägg i den aktuella katalogen och alla underkataloger:

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

Konvertera MySQL-databas till UTF-8

I mitt fall är alla mina tidigare mysql-databas inställda på ANSI-kodning (latin1_swedish_ci- kollation) den blir skadad i de moderna webbläsarna om det finns GB2312-tecken (multibyte). Till exempel har PhpMyAdmin kodning UTF-8 och ANSI/GB2312-tecknen kommer att visas skadade i webbläsaren.

För att spara dessa data till UTF-8 är den enklaste metoden att exportera tabellen (phpMyAdmin rekommenderas) till en SQL-fil; se till att du exporterar den med iso 8859-1 (komplett täckning av engelska). iso 8859-1 är också känd som ANSI men GB2312-tecknen kan lagras som en flerbytesträng. Om du öppnar SQL i anteckningsblocket kan du fortfarande se de kinesiska tecknen, du behöver bara spara som ‘UTF-8’-kodning.

Hur man konverterar GB2312 (eller andra icke-ANSI-tecken) till UTF-8-kodning (både MySQL och Files Charset)

phpmyadmin

Åh, en sak till innan du sparar som UTF-8. Du bör söka och ersätta ordet "latin1" till "utf-8" i SQL-filen. Importera sedan SQL-filen igen med phpMyAdmin så att du är igång. All data kommer att bevaras och ändras till UTF-8-kodning och sammanställningen kommer att ändras (för varchar, text, longtext etc) till utf8_general_ci.

MySQL UTF-8-inställningar

I PHP kan du ställa in standardteckenuppsättning:

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

Mysql_set_charset gör på liknande sätt:

Du kan också ställa in standardteckenuppsättningen när MySQL-servern startar (spara funktionskostnader för att anropa ovanstående funktioner). Gå till redigera filen /etc/mysql/my.cnf och starta om mysql-servern t.ex. sudo-tjänsten mysql restart. Lägg till följande till 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

Varför UTF-8?

UTF-8 behandlar alfabetiska bokstäver 1 byte (samma som ANSI) men använder 3 byte för att representera 1 kinesiskt tecken medan 2 byte används om de kodas av GB2312. Därför, om dina sidor innehåller många kinesiska tecken, sparar ANSI/GB2312 utrymmet, men UTF-8 och ANSI förbrukar exakt samma utrymme när det bara gäller engelska bokstäver.

UTF-8 sparar dig problem i framtiden. När du väl har konverterat till UTF-8 behöver du inte oroa dig för teckenuppsättningen eller kodningen. UTF-8 är mer internationellt karaktärsvänligt att de flesta webbläsare vet hur man visar texten korrekt. I mitt fall måste jag konvertera filerna till UTF-8-kodade eftersom mina favorittextredigerare både PsPAD och Sublime-text inte vet hur man visar ANSI/GB2312 korrekt.

Inspelningskälla: helloacm.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer