ugrás a tartalomhoz

UTF-8 Search

joschy · 2006. Jan. 22. (V), 00.45
Sziasztok!

Nincs valakinek egy UTF8-as anti-ékezetező function-ja valahol? :o)
Ha nem van, akkor persze szívesen megcsinálom és közzéteszem, csak egy tipp kéne, hogy vajon hogyan lesz: é=e ő=o stb.

(doksinak is örülnék)

Előre is köszönöm,
joschy
 
1

Van

attlad · 2006. Jan. 22. (V), 02.08
  1. function deaccent_utf8($string)  
  2. {  
  3.     $trans = array(  
  4.         "\xc3\xa1" => 'a',  
  5.         "\xc3\xa9" => 'e',  
  6.         "\xc3\xad" => 'i',  
  7.         "\xc3\xb3" => 'o',  
  8.         "\xc3\xb6" => 'o',  
  9.         "\xc5\x91" => 'o',  
  10.         "\xc3\xba" => 'u',  
  11.         "\xc3\xbc" => 'u',  
  12.         "\xc5\xb1" => 'u',  
  13.         "\xc3\x81" => 'A',  
  14.         "\xc3\x89" => 'E',  
  15.         "\xc3\x8d" => 'I',  
  16.         "\xc3\x93" => 'O',  
  17.         "\xc3\x96" => 'O',  
  18.         "\xc5\x90" => 'O',  
  19.         "\xc3\x9a" => 'U',  
  20.         "\xc3\x9c" => 'U',  
  21.         "\xc5\xb0" => 'U'  
  22.     );  
  23.     return strtr($string$trans);  
  24. }  
(Ha PHP fájlt UTF-8-ként mented, pl. \xc3\x81 helyett simán írhatsz Á-t is.)

De Unicode táblázatok itt: http://www.unicode.org/charts/
Latin-1 táblázat: http://www.unicode.org/charts/PDF/U0080.pdf (de ő, ű Latin Extended A-ban van)
Pl. Á -> kódtáblázatban a kódja 00C1 -> binárisba átváltva: 11000001
Wikipedián van egy táblázat: http://en.wikipedia.org/wiki/UTF-8#Description
Táblázat alapján: 00C1 az 000080–0007FF között van ezért:
Ebbe: 110zzzzx 10xxxxxx kell beírni az előbbi binárist (00011000001)
Ez lesz: 11000011 10000001 (2 bájt) -> hexába: C3 és 81
PHP: \xc3\x81

De pl. PHP ord()-dal is megkaphatóak a kódok:
  1. $s = 'Á';  
  2. echo ord($s{0}), ' ',  ord($s{1});  
2

<Nincs cím>

joschy · 2006. Jan. 22. (V), 14.44
Szia!

Nagyon koszonom a valaszod :-)

Bonyolitsuk meg egy kicsit a dolgot:
Van-e barmi lehetoseg arra, hogy automatikusan kitalaljam, hogy ő,ö,ó-nak o az ekezet nelkuli valtozata?
Azert erdekelne, mert bar alapom a magyar ABC, de tovabbi nyelvi valtozatok keszulhetnek, ezert valami olyan eljarason torom a fejem, ami automatikusan minden ekezetesnek megtalalja az ekezet nelkuli parjat.
Az egyetlen kiindulasi alapom jelenleg a nevbol van (pl: o with ancent), byte szinten nem tudom lehet-e ilyet.

ord-dal nem szivesen csinalnam, mert eleve UTF-8 kodolasom van, ord ezt meg elcseszi mivel ASCII-ve nyomja at a cuccot; avagy:
  1. $s = 'Á';  
  2. echo chr(ord($s{0})), ' ',  chr(ord($s{1}));  
mar furan nez ki :-)

Szoval azon kivul, hogy azt mondom, hogy:
  1. function deaccent_utf8($string)  
  2. {  
  3. "ù" => 'u',  
  4. "ú" => 'u',  
  5. "ü" => 'u',  
  6. "û" => 'u',  
  7. "Ũ" => 'u',  
  8. "ũ" => 'u',  
  9. "Ū" => 'u',  
  10. "ū" => 'u',  
  11. "Ŭ" => 'u',  
  12. "ŭ" => 'u',  
  13. "Ů" => 'u',  
  14. "ů" => 'u',  
  15. "Ű" => 'u',  
  16. "ű" => 'u',  
  17. "Ų" => 'u',  
  18. "Ư" => 'u',  
  19. "ư" => 'u',  
  20. "Ǔ" => 'u',  
  21. "ǔ" => 'u',  
  22. "Ǖ" => 'u',  
  23. "ȗ" => 'u',  
  24. "Ȗ" => 'u',  
  25. "ȕ" => 'u',  
  26. "Ȕ" => 'u',  
  27. "Ṳ" => 'u',  
  28. "ṳ" => 'u',  
  29. "Ṵ" => 'u',  
  30. "ṵ" => 'u',  
  31. "Ṷ" => 'u',  
  32. "ṷ" => 'u',  
  33. "Ṹ" => 'u',  
  34. "ṹ" => 'u',  
  35. "Ṻ" => 'u',  
  36. "ṻ" => 'u'  
  37. ...  
  38.    );  
  39.     return strtr($string$trans);  
  40. }  
letezik-e valami automatizalhatobb megoldas?

Avagy ez igy eleg huzos lenne :-)

Koszi,
joschy
3

Nem tudok róla

attlad · 2006. Jan. 22. (V), 15.58
Én eddig csak magyart akartam ékezetmentesíteni, arra a fenti a legegyszerűbb. De szerintem nem lehet a karakterkódokból kitalálni. A névből kitalálás az nem rossz ötlet, de az is max. arra, hogy elkészítsd ezt a megfeleltetés listát (mert azzal gyorsabb dolgozni). Szóval a listát egyszer mindenképp el kell készíteni, de biztos van aki már meg is csinálta valahol.. ha van más megoldás az engem is érdekelne.

(Amúgy chr()-es példa csak azért nem megy, mert a space-t benne hagytad a két bájt között.)
4

<Nincs cím>

joschy · 2006. Jan. 22. (V), 16.06
Hello,

SQL oldalrol is megprobaltam megkozeliteni a dolgot, de nem nagyon talaltam ott sem mas megoldast (mer ugye seach van), hogy letarolom kulon az ekezet-mentesitett verziot, de persze ehhez php-ben is kell dolgozni egy kicsit, mert ugye csak annak kellene letarolni az ekezet-mentesitett verziojat ami eleve ekezetes, nehogy 2 match legyen :-)

Koszi mindenesetre :-)

Udv:
joschy
5

strtr

Anonymous · 2006. Jan. 22. (V), 17.19
http://hu2.php.net/strtr

return strtr($string,
"ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ",
"SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy");

Nem próbáltam, de majd egyszer...

Üdv
Zoli
6

<Nincs cím>

joschy · 2006. Jan. 22. (V), 18.33
Szia

Nagyon hosszunak nez ez ki ha csak azt veszem, hogy 32+ U-beture konvertalandot nyomtam be az elobb, es az meg nem volt az osszes :-) nem beszelve az o a e i, es a mas nyelvekben honos massalhangzos dolgokra, kukacos, meg kalapos n, es tarsai :-)

De aze kosz, mindenkepp :-)

joschy
7

Experimental

hamlet79 · 2006. Jan. 22. (V), 22.54
És mi lesz az Experimental Programminggal? :)

Egyébként minek kell az ékezetmentesítés?
10

<Nincs cím>

joschy · 2006. Jan. 23. (H), 08.33
pszt :-) olvasd el az elso beszolast es let there be light ;-)
Az igazi ok persze az, hogy jomagam aki mindig a magyar cuccok teljes tamogatasa mellett szoktam lobbizni azert ekezet nelkul keresek mindent :-) Avagy arrol van szo, hogy meg kene talalnom az árvíztűrő tükörfúrógépet arvizturo tukorfurogep neven is :-)
8

Nem lehet

attlad · 2006. Jan. 23. (H), 01.49
Ezt így nem lehet, mert PHP nem támogatja UTF-8-at, majd kb. PHP 6-ban valamiko'
9

<Nincs cím>

joschy · 2006. Jan. 23. (H), 08.28
Akkor asszem csinalok gyorsan egy feature requestet (ha meg nincs ilyen), hogy ne nekem kelljen lustasagom csucspontjanak kibontakozasa pillanataban leprogramozni az egesz szart :-D

Jelenleg 2 otvar megoldas letezik a problemara, es mind2-nel meg koll valositani egy ilyen manualis ide-oda konverzios dolgot, tehat elkerulhetetlen egy utf-8 deaccenter function letrehozasa :-)
1) sql-ben letarolom az ekezet-mentes nevet is egeszen addig amig nincs jo megoldas :-)
2) mindent atszivok php-ba (SELECT * FROM sky), es ottan probalkozok realtime ezzel az ide-oda konvertalommal.

A kerdes az, hogy vajon php-ban megoldva a dolgot mennyivel nagyobb performance impact, mintha egy SQL szerver csinalna?

Koszi,
joschy
11

Itt tal'lsz egy megoldást

Poetro · 2006. Jan. 25. (Sze), 14.59
http://www.poetro.hu/sandbox/cleanstring.php
--------
Poetro