UTF 8 - české znaky – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

UTF 8 - české znaky – PHP – Fórum – Programujte.comUTF 8 - české znaky – PHP – Fórum – Programujte.com

 

Mudr. Jiří Kopeček
~ Anonymní uživatel
5 příspěvků
10. 2. 2015   #1
-
0
-

Dobrý den,

Potřeboval bych poradit. Vkládám data z mysql tabulky na web pomocí php. Mysql databáze je nastavena jako UTF-8 a i tabulka a všechny její pole jsou nastavena jako utf8_czech_ci. V mysql tabulce se všechny data vypisují správně tak jak mají z veškerou diakritikou. Ale bohužel na webu se místo českých znaků (č,ř,š,ě) vypisují obyčejné otazníky (???). Stránka je taktéž nastavena v UTF-8 v hlavičce stránky (HTML 5 stránka) je definováno UTF-8 jako  <meta charset='utf-8'>. Po připojení do databáze v php skriptu mám ze zoufalství zadáno tohle:  

header('Content-type: text/html; charset=utf-8');
mb_internal_encoding("UTF-8");
mb_http_output( "UTF-8" );
mb_http_input('UTF-8');
ob_start("mb_output_handler");   
mb_regex_encoding('UTF-8');
mysql_set_charset('utf8');
mysql_query("SET NAMES 'utf8'"); 

ale stále se místo českých znaků vypisují obyčejné otazníky....

Už si fakt nevím rady, děkuji předem za odpověď.

Nahlásit jako SPAM
IP: 46.47.152.–
Kit+15
Guru
10. 2. 2015   #2
-
0
-

#1 Mudr. Jiří Kopeček
Prvním SQL příkazem po každém připojení k databázi musí být 

SET NAMES utf8
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
11. 2. 2015   #3
-
0
-

Zkus sem dat jednoduchy funkcni php kod. Treba tam mas nespravne poradi nebo jine problemy. Takhle se to neda vyzkouset.
Tez dobre napsat v tomto pripade i verzi php a mysql (phpinfo();). Treba mysql 4 a mensi zmenu kodovani nepodporuje, tam je natvrdo tusim latin1. Ale ty rikas, ze ti nekde ukazuje utf8, tak to mas asi 4.3 a vyssi.

Spravne poradi
mysql_query("SET NAMES 'utf8'"); // nastav kodovani pro pripojeni
mysql_query("SELECT ..."); // prikazy
mysql_query("INSERT ..."); // prikazy
 

Spatne poradi
mysql_query("SELECT ..."); // prikazy
mysql_query("SET NAMES 'utf8'"); // nastav kodovani pro pripojeni
mysql_query("INSERT ..."); // prikazy

Pokud tam mas pripojeni db ve funkci, tak je dobre radek s kodovani soupnout hned do ni. Pripadne take format datumu (pak to nemusis preformatovavat pres php, ale zas pres php je to nekdy lepsi) a nejake dalsi veci.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:ed9c:1a...–
peter
~ Anonymní uživatel
3981 příspěvků
11. 2. 2015   #4
-
0
-

Mimochodem, misto mysql_query pouzivam vlastni funkci. Pak je mozne do ni pridat mysql_error a jine veci. Treba echo '<br>'.$sql_query; a pak ti zobrazi vsechny sql dotazy pres ni volane, cili vidis i poradi, jak po sobe jdou.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:ed9c:1a...–
Kit+15
Guru
11. 2. 2015   #5
-
0
-

#4 peter
Místo mysql_query se už dávno používá mysqli_query nebo PDO::query.

V další verzi PHP už funkce mysql_query nebude.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
11. 2. 2015   #6
-
0
-

A co jako? Vysledek je stejny. Pokud chci zobrazit dodatecne informace, tak to musim obalit funkci a pridat dalsi kod.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:ed9c:1a...–
Kit+15
Guru
11. 2. 2015   #7
-
0
-

#6 peter
Funkce PDO už není nutné obalovat, zejména pokud se vyhneš použití metody query().

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Mudr. Jiří Kopeček
~ Anonymní uživatel
5 příspěvků
11. 2. 2015   #8
-
0
-

#3 peter
Verzi mysql mám tu nejnovější 5.5.11. Také používám tohle správné pořadí: 

Spravne poradi

mysql_query("SET NAMES 'utf8'"); // nastav kodovani pro pripojeni
mysql_query("SELECT ..."); // prikazy
mysql_query("INSERT ..."); // prikazy

Prostě opravdu nevím kde by mohl být problém.

Nahlásit jako SPAM
IP: 46.47.152.–
peter
~ Anonymní uživatel
3981 příspěvků
12. 2. 2015   #9
-
0
-

Tak potom udelej jednoduchy php kod a dej ho sem. Testovat nic je jako testovat vitr.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:6dfa:81...–
peter
~ Anonymní uživatel
3981 příspěvků
12. 2. 2015   #10
-
0
-

A taky bys mohl poslat vypis z databaze (dump) vcetne vytvareni tabulek.

Ono, kdo vi, cim tu db prohlizis. Pokud je to spravne, tak by se to melo zobrazit spravne. Ale pokud to ten program umi nejak prevadet sam, kdo vi. Nebo neumi pracovat s kodovanim. Treba by mozna stacilo i to, co ti to zobrazuje na obrazovku ve spatnem kodovani, z toho by se mohlo dat urcit spravne. Treba je to latin1 nebo latin2 a ty si jen myslis, ze je to utf.
Ono totiz jde udelat to, ze se pripojis k db jako utf, ale data posles v latin1 a ne utf. Takze do db se to ulozi v latin1. Pro cteni pak potrebujes se opet pripojit pres utf, ale stranka musi mit latin1. A nebo muze mit taky utf, ale musis to zkonverovat pres iconv nebo (mb_conv) z latin1 do utf.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:6dfa:81...–
Kit+15
Guru
12. 2. 2015   #11
-
0
-

#8 Mudr. Jiří Kopeček
Pořadí je správné.

Data jsou možná chybně uložena. Defaultním kódováním je totiž Latin1. V tom případě je nutné tabulky zrušit, založit znovu s kódováním UTF-8 a nahrát tam data znovu. V každém kroku se dá udělat chyba.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Mudr. Jiří Kopeček
~ Anonymní uživatel
5 příspěvků
12. 2. 2015   #12
-
0
-

I když to uložím jako UTF-8 výsledek stejný..... 

Vykašlal jsem se na nějaký csv soubor a jednoduše jsem v mysql vytvořil tabulku (UTF-8) s 2 poli vložil tam pár záznamu s českými znaky a znovu jak to chci vypsat na webu tak místo českých znaků je ????? 

Fakt už jsem extrémně zoufalej.....

Nahlásit jako SPAM
IP: 46.47.152.–
Mudr. Jiří Kopeček
~ Anonymní uživatel
5 příspěvků
12. 2. 2015   #13
-
0
-

   

   <?php
$con = mysqli_connect("localhost","xxxxx","xxxxxx","xxxxxx") 
or die('Could not connect to MySQL database. ' . mysql_error());   
$result = mysqli_query($con, "SELECT * FROM TABLE8");                         
echo "<table>
<tr>
<th>Jméno</th>
</tr>";

while($row = mysqli_fetch_array($result)) { 
mysql_query("SET NAMES 'utf8'");     
  echo "<tr>";
  echo "<td>" . $row['aaaaa'] . "</td>"; 
  echo "</tr>";
}  

echo "</table>";

mysqli_close($con);
?>  
Nahlásit jako SPAM
IP: 46.47.152.–
Kit+15
Guru
12. 2. 2015   #14
-
0
-

#13 Mudr. Jiří Kopeček
Ale tohle je jinak, než jsi psal. Psal jsem, že "SET NAMES utf8" musí být prvním příkazem. Má to být takhle: 

<?php
$con = mysqli_connect("localhost","xxxxx","xxxxxx","xxxxxx") 
    or die('Could not connect to MySQL database. ' . mysql_error());   
mysqli_query($con, "SET NAMES 'utf8'");     
$result = mysqli_query($con, "SELECT * FROM TABLE8");                         
echo "<table>
<tr>
<th>Jméno</th>
</tr>";

while($row = mysqli_fetch_assoc($result)) { 
  echo "<tr>";
  echo "<td>" . htmlspecialchars($row['aaaaa']) . "</td>"; 
  echo "</tr>";
}  
echo "</table>";

Navíc mícháš ovladače mysql a mysqli. To se nesmí.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Mudr. Jiří Kopeček
~ Anonymní uživatel
5 příspěvků
13. 2. 2015   #15
-
0
-

#14 Kit
Už jede jede jak má! :-) To co si napsal zabralo :-) Díky za pomoc.

Nahlásit jako SPAM
IP: 46.47.152.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

České znaky ? — založil Lukas

České znaky — založil CommanderZ

České znaky v dev-c++ — založil tomáš polz

[DB] - mysql a české znaky — založil micro.21

DecodeURI české znaky — založil kalašnikov

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý