Autor | Zpráva | ||
---|---|---|---|
34111 Profil |
#1 · Zasláno: 23. 3. 2017, 15:16:39 · Upravil/a: Moderátor (editace znemožněna) 23. 3. 2017, 20:02:00
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 |
#2 · Zasláno: 23. 3. 2017, 15:32:23
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 |
#3 · Zasláno: 23. 3. 2017, 23:01:18
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 |
#4 · Zasláno: 25. 3. 2017, 00:00:16
Asi bych použil hotový řešení Nette\Utils\Strings::toAscii($text_adresy) github.com/nette/utils/blob/master/src/Utils/Strings.php#L133
|
||
Časová prodleva: 7 let
|
0