ugrás a tartalomhoz

Karakterkódolás javítás karaktercserékkel nem megy

Anonymous · 2006. Nov. 18. (Szo), 15.19
Egy olyan oldallal talalkoztam amiben vmiert nem megy rendesen a karakterkodolas es nekem kene vmiket modositanom rajta. Az alabbi szkriptet probaltam ki (adatbazisban a kod kene), de a csere nem hajtodik vegre. Mi a hiba?
  1. $char=array("Ő","ő","Ű","ű");  
  2. $code=array("&#336","&#337","&#368","&#369");  
  3. $subj=preg_replace($char,$code,$subj);   
 
1

ez így elég kevés info..

Cadeyrn · 2006. Nov. 18. (Szo), 15.53
Üdv!

1. miben van kódolva a script?
2. miben van kódolva az oldal?
3. mit jelent a "csere nem hajtódik végre"? Kipróbáltad, hogy más dologgal megy-e?

Ezek után talán tudok mondani valamit, mert ilyennek én is szívtam.
2

a replace fg-re fogom butasagom

Anonymous · 2006. Nov. 18. (Szo), 16.17
csak a cseret probalgattam egy kulon kodban. ha a $subj="őz"; es a vegen kiratom akkor sem csereli ki. ugyanez vonatkozik az osszes tobbi cserelofuggvenyre. ugy vettem eszre, hogy a nem ekezetes betuket megtalalja. vmi megoldas, hogy ezeket is kicserelje?
3

nem csoda, hogy nem megy

Hojtsy Gábor · 2006. Nov. 18. (Szo), 16.19
A preg_replace() delimiter karaktereket vár a minta (első paraméter) elején és végén. Lásd a példákat a PHP kézikönyvben a használatáról. Egyébként adott esetben az str_replace() nagyon szépen használható, nem kell ágyúval verébre lőni.
4

str_replace()

Anonymous · 2006. Nov. 18. (Szo), 16.25
a fenti fg-el probaltam eloszor, a preg_replace-t csak utana probaltam
6

Ne nézd a neveket

randomly · 2006. Nov. 18. (Szo), 20.54
Szia!

A függvény neveit ne nézd teljes buták.
De amire nekem kell müködik és nem akarom bántani a motort.
  1. <?php  
  2. function urlencodeunicode($text) {  
  3.    $unicodechars=array(  
  4.     "%u0151",   // ő  
  5.     "%u0150",   // Ő  
  6.     "%u0171",   // ű  
  7.     "%u0170",   // Ű  
  8.     "%u00e1",   // á  
  9.     "%u00c1",   // Á  
  10.    );  
  11.    $chars=array(  
  12.     "ő",  
  13.     "Ő",  
  14.     "ű",  
  15.     "Ű",  
  16.     "á",  
  17.     "Á",  
  18.    );  
  19.    $text=str_replace($unicodechars,$chars,$text);  
  20.   return($text);  
  21. }  
  22. ?>  
rand
5

karaktercsere

Anonymous · 2006. Nov. 18. (Szo), 18.29
nekem egy sokkal egyszerűbb módon megy az ilyen:
egy switch szerkezetben egyenként végig vizsgálja az általam megírt betukonver() függvény az input szöveget, és cserélget. Bár költséges algoritmus, 100% működik. A PHP függvények nem mindig tökéletesek!
9

Anonymous · 2006. Nov. 19. (V), 17.46
ha
7

próba

Nigi · 2006. Nov. 18. (Szo), 23.07
Én is kipróbáltam, de pl $a=strpos($nev,"ő"); nem kapja meg az "ő" betűt. Mi lehet a hiba? Most már engem is érdekel...
8

multibyte?

sotetbarna · 2006. Nov. 19. (V), 00.23
ha van mbstring kiterjesztés, akkor érdemes kipróbálni:
  1. $subj = mb_convert_encoding($subj'HTML-ENTITIES''ISO-8859-2');  
vagy
  1. $subj = mb_convert_encoding($subj'HTML-ENTITIES''UTF-8');  
(nemtom milyen karakterkódolást használsz...)

mb_convert_encoding manual itt

de ha a gyökerekhez akarunk visszatérni, hogy nem megy a karakterkódolás, akkor egész sokféle oka lehet:
- milyen header-t küldesz php-ből a böngészőnek?
- milyen headert küld a webszerver (apache)?
- valójában milyen kódolásban kapja a böngésző az adatokat?
- milyen charset van beállítva a html-ben meta tag-nek?
- az adatok az adatbázisban hogyan vanak kódolva?
- megfelelő függvényeket használsz-e a stringek kezelésénél (pl. substr nem biztos, hogy a várt eredményt adja UTF-8-as kódolásnál)?
- használsz-e javascriptet az adatátvitelnél, vagy milyen kódolással küldi vissza a böngésző az adatokat (ajax vagy bármilyen kódolás)?

szóval ezeket szépen le kell ellenőrizni és beállítani...