Autor Zpráva
34111
Profil
Zdar,
tak nějak nevím, jestli už jsem přepracovaný.. :)

1. Soubor (neco.php) je v kódování UTF8
2. MySQL databáze, daná tabulka i sloupec je v kódování UTF8_czech_ci
3. Na webu všechno, co se tahá z databáze nebo z kódu je správně česky.
4. V includu pro connect databáze je dáno po připojení set names na utf8

Proměnná $x je výpis adresy z databáze. Když ji samostatně vypíšu, je čeština v pořádku.
Jakmile ji proženu přes funkci StrTr, kde odstraním háčky a čárky a následně vypíšu, tak se zobrazuje jako by žádné utf8 nefungovalo tzn. otazníky, stříšky apod., jako když vypnete set names uft8... Kde je problé?

$text_adresy = $adresa;
                      $preved_adresu = StrTr($text_adresy, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz");
                        
                       echo "<script> alert('$text_adresy'); </script>";
                       echo "<script> alert('$preved_adresu'); </script>"; 

Moderátor Davex: Titulek „StrTr - problém. Kdo pomůže?“ nevystihoval podstatu dotazu. Příště zkus prosím vymyslet lepší.
Joker
Profil
Příčinu bych tipoval v tom, že základní řetězcové funkce PHP moc nepočítají s vícebajtovým kódováním (což UTF-8 je).

Zřejmě půjde o problém, který popisuje tenhle komentář v manuálu PHP: nl3.php.net/manual/en/function.strtr.php#111270
Chro.
Profil
Funkce strtr se třemi parametry nahrazuje nikoli znak za znak, ale bajt za bajt. Protože Á má 2 bajty a A jeden, převod se neprovede korektně. Řešení je
$uprav_text = strtr($text, array('Á' => 'A'));
milous
Profil
Asi bych použil hotový řešení Nette\Utils\Strings::toAscii($text_adresy) github.com/nette/utils/blob/master/src/Utils/Strings.php#L133

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0