Jump to content
php.lv forumi

[Atrisināts] MySQL satura konvertācija


fr3akX

Recommended Posts

Sveiki!

Šobrīd cīnos ar sekojošu problēmu. Ir datubāze kuras tabulu kodējums ir latin1 un satura kodējums ir ISO-8859-13,ISO-8859-1, 1257 t.i LV, RU, EN. Saturs man ir jāpārkonvertē uz UTF-8, tad arī pašas tabulas jāpārkonvertē uz UTF-8. Tākā saturs ir vairākos kodējumos, tad šis variants neder (http://www.mysqlperformanceblog.com/2007/12/18/fixing-column-encoding-mess-in-mysql/). Nav iespējams arī pārkonvertēt ar iconv, tākā ir jānorāda ieejas kodējums, un tie ir vairāki. Man ir pāris varianti kā šo konvertējumu varētu paveikt:

  1. Detektēt katra simbola kodējumu un konvertēt ar iconv (problēma - kā detektēt)
  2. Izveidot charsetu tabulu, pēc kuras izparsēt visu datubāzi aizmainot vienu pret otru, arī simbola bāzēts risinājums, bet šajā gadījumā pastāv iespēja, ka dažādos gadījumos simboli var sakrist

varbūt kāds ir saskāries ar šādu problēmu un varētu ieteikt risinājumu.

Jau iepriekš paldies!

Edited by fr3akX
Link to comment
Share on other sites

var megjinaat sadi:

izlasiit 3 atseviskjos *.sql failos datus --> katram kodejumam atseviskji (ceru ka kautkaa tachu tos datus peec valodaam atskjir)

kartu atseviskji parkonverteet --> un pec tam salasiit visu kopaa....

kjepiigi , bet vajadzeetu izdoties...

Link to comment
Share on other sites

Aplikācijā ir iespēja pārslēgties starp valodām. Sadalīt 3 sql failos nesanāks, jo visas valodas ir vienā kaudzē. Piem. ja izvēlies RUS interfeisu un raksti LV, tad tas arī tā saglabāsies. Tabulās nav nekāda dalījuma starp valodām. Ja raksta RUS interfeisaa LV purtiem, un otrādi, tad simboli saglabājas entītēs, ko pārkonvertēt problēmu nebūs.

Domāju jābūt iespējai nodetektēt čārsetu, piem. skanē vārdu, ja atrod kādu simbolu, kas nav en, tad skatās konvertāciajs tabulās, jā tādu atrod, tad visu vārdu konvertē no detektētā čārseta. Problēma tikai atrast šādas tabulas.

Edited by fr3akX
Link to comment
Share on other sites

???

pag, a kaa tad juus atskjirojat valodas?

Raksti utt?

kautkaa murgaini .... visi teksti (teiksim komentari) ir lapaa redzami gan LV, gan Ru , gan Eng??

un db nekaa tas netiek skjirots???

tb parsledzos uz LV un man krievu tekstaa vietaa raadas herioglifi???

 

Edit : un kaa atskjirsi kaadaa valoda ir vards FORUMS / ? angliski vai latviski?

Edited by Grey_Wolf
Link to comment
Share on other sites

???

pag, a kaa tad juus atskjirojat valodas?

Raksti utt?

kautkaa murgaini .... visi teksti (teiksim komentari) ir lapaa redzami gan LV, gan Ru , gan Eng??

un db nekaa tas netiek skjirots???

tb parsledzos uz LV un man krievu tekstaa vietaa raadas herioglifi???

 

Šī sistēma ir per/user. Satur sevī informāciju par lietotājiem un to kontaktiem. Dažādi lietotāji lieti dažādus interfeisus, tādēļ nav nepieciešamības redzēt informāciju, kas ir vadīta no citas valodas.

EDIT:

Edit : un kaa atskjirsi kaadaa valoda ir vards FORUMS / ? angliski vai latviski?

Par to pēdējo, tad domāju, ka tam nav atšķirības, tā kā tur nav diakritisko simbolu.

Edited by fr3akX
Link to comment
Share on other sites

Nu it kā ir: mb_detect_encoding

 

Tad sanāk, ka lietotājam ir fiksēta valoda interfeisā ? Tb, ja nebūtu, tad pastāvētu iespēja, ka ievadot RU infu caur RU intefeisu un pēc tam atverot LV interfeisu, būs garbage simboli ?

Link to comment
Share on other sites

Nu it kā ir: mb_detect_encoding

 

Tad sanāk, ka lietotājam ir fiksēta valoda interfeisā ? Tb, ja nebūtu, tad pastāvētu iespēja, ka ievadot RU infu caur RU intefeisu un pēc tam atverot LV interfeisu, būs garbage simboli ?

Tā arī ir, ka lietotājam, kurš vadījis RU interfeisā, atverot LV ir ķeburi. mb_detect_encoding esmu skatījies, diez cik labi tas nestrādā, detektee tikai ASCII un UTF-8, vismaz tā ir manā gadījumā.

Link to comment
Share on other sites

Nu luuk arii risinajums , apskaties kadu interfeisu vinsh lieto un miers...

kursh teksts kuram userim pieder tu tachu zini?

zinu tikai kāda valoda tika norādīta reģistrējoties, bet pēdējais valodas uzstādījums tiek glabāts tikai pārlūka cookie. Var jau balstoties uz to kāda valoda tika norādīta reģistrējoties, bet būs datu zudumi. Izskatās, ka tas ir vienkāršākais risinājums. Ja ņemties ar konvertācijas tabulām, tad arī iespējams būtu datu zudumi, ja simboliem dažādos kodējumos izrādās vienāds hex's.

Droši vien būs jāveic konvertācija, kas balstās uz valodu, kas norādīta registrējoties.

 

Paldies, par ātrām atbildēm un padomiem!

Link to comment
Share on other sites

Ja visi iespējamie encodingi ir zināmi, tad var uztaisīt funkciju, kas mēģināt pārvērst no katra uz utf8 un pārbaudīt, vai ir utf8 vai nav, ja nav, pārkonvertēšanai ņemt nākamo encodingu.

utf8 var pārbaudīt ar šādu funkciju, ko uzgāju iekš php.net.

function isUTF8($str) {
if ($str === mb_convert_encoding(mb_convert_encoding($str, "UTF-32", "UTF-8"), "UTF-8", "UTF-32")) {
	return true;
} else {
	return false;
}
}

mb_convert_encoding vietā var izmantot arī iconv.

Link to comment
Share on other sites

Ja visi iespējamie encodingi ir zināmi, tad var uztaisīt funkciju, kas mēģināt pārvērst no katra uz utf8 un pārbaudīt, vai ir utf8 vai nav, ja nav, pārkonvertēšanai ņemt nākamo encodingu.

utf8 var pārbaudīt ar šādu funkciju, ko uzgāju iekš php.net.

function isUTF8($str) {
if ($str === mb_convert_encoding(mb_convert_encoding($str, "UTF-32", "UTF-8"), "UTF-8", "UTF-32")) {
	return true;
} else {
	return false;
}
}

mb_convert_encoding vietā var izmantot arī iconv.

 

interesants variants, būs jāizmēģina. paldies!

Link to comment
Share on other sites

Gala risinājums ir līdzīgs sākotnēji izteiktajiem variantam par konvertācijas tabulām.

1. Katram charsetam tika izveidots paterns heksā, kur ietilps visi simboli, kas nav ASCII. (http://www.mikezilla.com/exp0012.html)

2. Katrs ieraksts tika matchots pret katru paternu un, ja tas mačojās, tad iegūstam ieraksta kodējumu, ja nē, tad tas ir ASCII.

3. Kad ieguvām kodējumu konvertējam ierakstu ar iconv no iegūtā kodējuma uz UTF-8.

4. Kad ieraksts tika pārkonvertēts uz UTF-8, pēdējais solis bija pārkonvertēt entītes ar html_entity_decode.

 

Pēc kā tika iegūts UTF-8 kontents :)

Link to comment
Share on other sites

×
×
  • Create New...