Autor Zpráva
SOS
Profil *
<?php include 'config.php'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs-cz" lang="cs-cz" > 
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
  <title>Titulek</title>
</head>
<body>  
<?php
if($pripojeni = @mysql_connect($mysqlhost, $mysqluser, $mysqlpass)) {
  mysql_select_db($mysqldb);
  
  mysql_query($sql);
  $sql="SET character_set_client=utf8";
  mysql_query($sql);
  $sql="SET character_set_results=utf8";
  mysql_query($sql);
  $sql="SET character_set_server=utf8";
  mysql_query($sql);
  
  
  if($vypis=mysql_query("SELECT * FROM uzivatele ORDER BY email")) {
    printf("<p>Počet záznamů: %d</p>\n", mysql_num_rows($vypis));
    printf("<p>Počet sloupců: %d</p>\n", mysql_num_fields($vypis));
 
// Vypíše tabulku
    echo "<table>"; 
    while ($polozka = mysql_fetch_object($vypis)) 
    echo "<tr><td>".htmlentities($polozka->jmeno)."</td><td>".htmlentities($polozka->prijmeni)."</td></tr >\n"; 
    echo "</table>"; 
    
    mysql_free_result($vypis);
  }
} else {
  printf("<p>Připojení k serveru MySQL se nezdařilo! %s</p>\n",
    mysql_error());
}
mysql_close($pripojeni);
?>
</body> 
</html>


Zajímavé je, že dokument je v UTF8, charset v dokumentu je taky UTF8 DB je UTF_chzech_ci zkoušel jsem s fora kde co, ale výsledek žádný... Poradíte?
Petr ZZZ
Profil
SOS:
výsledek žádný...
Asi to bude rozbité.
SOS
Profil *
V čem přesně je to rozbité? Data z databáze mysql se mi vipisují, ale ve špatném kódování...
Nemám problémy s vypsáním dat, ale s jeho znakovou sadou...
Počet záznamů: 1

Počet sloupců: 27

JmÈno	PÅ�íjmení

// Má tam být Jméno a Příjmení
Kry5
Profil
SOS:
Dokud se ti data budou "vipisovat" tak ti asi nikdo moc neporadí...

Jinak pokud používáš v db jinou znakovou sadu než v aplikace podívej se k čemu slouží
mysql_set_charset
SOS
Profil *
http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=122934

Zde se řeší úplně stejný problém:
Stejné kodovaní musí být nastaveno ve třech místech: 

1) V databazi 
2) soubor musí být uložen v potřebnem kodovaní 
3) v meta tágu 


Všechno splňuji, proč mi to tedy nefunguje, musí se udělat ještě něco?
Taps
Profil
SOS:
zkoušel jsi níže uvedené ?
mysql_query("set names utf8");
SOS
Profil *
Ano, jak jsem psal, prohlédl jsem si zdejší diskuzi, ale nic mi nepomohlo, vůbec tomu nerozumím... ;-)

Zkusím ještě pohledat, ale toto vlákno můžete zamknout(nebo smazat), protože vše co jsem našel mi tu stejně vypisujete...

Ale i tak díky.
Davex
Profil
SOS:
Obecně by mělo stačit nastavení podle Tapse.

1) Když si záznamy vypíšeš v phpMyAdminu, tak je čeština správně?
2) Přepne se prohlížeč na správnou znakovou sadu (např. ve Firefoxu nabídka Zobrazení » Znaková sada) nebo je tam nějaká jiná než UTF-8?
SOS
Profil *
Vím že tu píšu moc kódů, ale postupoval jsem takto:
V administraci jsem si vytvořil db s porovnámím utf_czech_ci
poté jsem se přihlásil do mysql databáze a vyvolal sql dotaz:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE IF NOT EXISTS `uzivatele` (
  `email` varchar(255) NOT NULL,
  `jmeno` varchar(45) DEFAULT NULL,
  `prijmeni` varchar(45) DEFAULT NULL,
  // A DALŠÍ SQL sloupce
  PRIMARY KEY (`email`),
  KEY `FK_users_cities` (`blizkemesto`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; // utf8

Poté přes php admina naplnil db zkušebními daty

vytvořil html dokument a vložil tam toto
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs-cz" lang="cs-cz" > 
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
// a další html tagy

<?php
if($pripojeni = @mysql_connect($mysqlhost, $mysqluser, $mysqlpass)) {
  mysql_select_db($mysqldb);
  mysql_query("set names utf8");
    
  if($vypis=mysql_query("SELECT * FROM uzivatele ORDER BY email")) {
    printf("<p>Pocet záznamu: %d</p>\n", mysql_num_rows($vypis));
    printf("<p>Pocet sloupcu: %d</p>\n", mysql_num_fields($vypis));
 
// Vypíše tabulku
    echo "<table>"; 
    while ($polozka = mysql_fetch_object($vypis))  
    echo "<tr><td>".htmlentities($polozka->jmeno)."</td><td>".htmlentities($polozka->prijmeni)."</td></tr >\n"; 
    echo "</table>"; 
    
    mysql_free_result($vypis);
  }
} else {
  printf("<p>Pripojení k serveru MySQL se nezdarilo! %s</p>\n",
    mysql_error());
}
mysql_close($pripojeni);
?>


Podle toho jak to popisuji, by to vše mělo být správně že?
SOS
Profil *
Davex:
1) Když si záznamy vypíšeš v phpMyAdminu, tak je čeština správně?
2) Přepne se prohlížeč na správnou znakovou sadu (např. ve Firefoxu nabídka Zobrazení » Znaková sada) nebo je tam nějaká jiná než UTF-8?

Ano v phpmyadminu se znaky zobrazují správně...
Ano prohlížeč má správnou znakovou sadu, všude jsou háčky a čárky, jen chybí tam kde php script volal data z DB.
SOS
Profil *
Už jsem na to přišel:D.
Za vše může tento výraz:
echo "<tr><td>".htmlentities($polozka->jmeno)."</td><td>".htmlentities($polozka->prijmeni)."</td></tr >\n";


Správně zde má být toto:
    echo "<tr><td>".($polozka->jmeno)."</td><td>".($polozka->prijmeni)."</td></tr >\n";



Jak se ale řeší třeba stav když dá někdo do jména atribut
</div>

Předem děkuji za další vysvětlení.
Davex
Profil
SOS
Jak se ale řeší třeba stav když dá někdo do jména atribut </div>
Uživatelský vstup se před výpisem na stránku ošetří pomocí funkce htmlspecialchars().

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