Indsættelse af vietnamesiske bogstaver i database

Tags:    php

<< < 12 > >>
Problemmet kan sikkert løses som andre charsets end lige det vietnamesiske, men det ku jo være.

Situationen er følgende:
1: Man skriver en tekst med vietnamesiske tegn i en HTML form og submitter.

2: PHP indsætter det i en MySQL database hvor det er gemt som de rigtige tegn og ikke som HTML kode eller lignende hax.

3: Man kan lave en søgning i databasen efter et ord der ikke bruger vietnamesiske tegn og finder en tekst der indholder det. Ex: Man søger efter 'van' og finder tekster indholdende 'vẫn'. (og her er et godt eksempel på at udvikleren.dk har de samme problemmer så det er skrevet med HTML :P ).


Jeg har forsøgt med alle mulige charset indstillinger såsom header(), <meta> og accept-charset="" hvor alle er sat til UTF-8 da de vietnamesiske tegn findes i denne. Databasen (tabellen) er sat til at bruge UTF-8 til data'en og utf8_general_ci coalition til selve søgningen.

Hvor det går galt er ved punkt 2, indsættelsen.

Indsættelsen af data virker korrekt hvis det bliver gjort med phpMyAdmin og søgningen kan lade sig gøre. Men med min egen lille test side indsætter den ikke teksten korrekt og søgningen fejler derfor. Jeg har gennemrodet phpMyAdmin koden (både HTML, PHP og SQL) men der er dælme meget og har ikke fundet hvad det er phpMyAdmin gør anderledes.

Så spørgsmålet er: Hvordan indsætter man data'en 100% som den er i en MySQL(v5) database ved hjælp af PHP(v5)?

Kan godt komme med en masse kode, men der er meget (forskelligt) og ved ikke hvor problemmet kan ligge



Indlæg senest redigeret d. 17.08.2008 16:16 af Bruger #6372
12 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 8 karma
Sorter efter stemmer Sorter efter dato
PHPMyAdmin plejer at skrive koden den bruger til indsert metoden, prøv at efterlige den!



prøv at afvikle følgende to queries:

Fold kodeboks ind/udKode 


Lige netop, det var de kommandoer jeg kørte først.



De to queries skal så'n set stå som det første efter der oprettet adgang til database og tabel. Da sikrer du at resultater fra både selects og inserts/updates er i UTF-8.

Derefter skal du checke at du:
- indhold hentet fra database er i utf-8
- sender content-type header til browseren fra serverside
- sætter content-type header i html. (måske ikke nødvendig)
- gemmer filen i utf-8. Mener at utf-8 bom skal undgåes.
- til slut og sidste udvej, prøver at lege med utf8_encode() og utf8_decode()



Jeg tror det er databasen der ikke tillader tegnene...

Prøv at læse her : http://bugs.mysql.com/bug.php?id=4745

Her er en løsning, http://vietunicode.sourceforge.net/howto/vietcollationmysql.html





Det phpMyAdmin skriver er den helt standard måde at indsætte på, sammen med de vietnamesiske tegn. Og det bliver gjort på samme måde på min test side.

fx (ja koden er ikke køn men hurtig :P):
Fold kodeboks ind/udKode 

viettext er a typen TEXT.

I må ikke spørge mig om hvad det vietnamesiske betyder :P



Peter, nu kan jeg ikke lige præcis huske hvordan det er, men jeg fik det til at virke, ved at køre en kommando først der fortæller at overførelse også skal ske i utf8.



prøv at afvikle følgende to queries:

Fold kodeboks ind/udKode 




Jeg går udfra at I mener disse kommandoer skal køres inden INSERT (i samme connection).

Fold kodeboks ind/udKode 


Der skette ikke nogen ændring så enten virkede det ikke, ellers mangler der noget, eller også er der nogen af de andre ting jeg har lavet der forstyre?



Content-type er sendt med header() til browseren og også sat i HTML med <meta>
Fold kodeboks ind/udKode 
Der er også prøvet med den mere korrekte xhtml version uden held.

Filen er gemt i UTF-8 og det skal rigtig nok være uden BOM da PHP ellers tror der allerede er lavet output til siden og kan derfor ikke sende header.

utf8_encode() kendte jeg ikke men har nu prøvet den. Men den ser ud til at gøre det hele endnu være, hvilket kunne tyde på at der måske også er problemmer med fra submit til PHP. Eller skyldes dette måske bare at utf8_encode() opfatter input teksten som ikke-utf8 eller noget i den stil?

For at teste om det kun er det der er galt har jeg også prøvet med en INSERT med "rå tekst" (i korrekt UTF-8), men den bliver også forkert indsat i databasen.

... manner jeg hader charset :/



Hmm, søgningen virker i den version af MySQL jeg har installeret. Om det så kun er nogen af tegnene er jeg ikke lige klar over, da jeg ikke er ekspert på vietnamesisk :) .

Problemmet er her mere at få de rigtige tegn indsat i databasen.



<< < 12 > >>
t