Ahoj ahoj.
Situace se má takto:
stránky psané a uožené v iso-8859-2
v hlavičce v meta tagu je taky iso-8859-2
databáze je celá v latin2_czech_cs
každá tabulka je v latin2_czech_cs
každý sloupeček je v latin2_czech_cs
Čárkovaná písmena se ukládají v pořádku, místo háčkovaných se ukládají otazníčky.
PROČ ?! Už na tom dělám moc dlouho a nedává to smysl :(
mrkni tu do jiných threadů, dával jsem tam ve spojení s UTF-8 3 mysql_query, které ti myslím pomůžou...
a je vystup/vstup SQL nastaven na iso?
2 Jirka -> koukal jsem na to, ale už jsem to v utf8 měl a to bylo ještě horší. To není řešení, to je jen obcházení z jiné strany.
2 Marek -> myslíš mysql_query("set names...") a tak ?
myslel jsem, že UTF-8 vyměníš v těch query za ISO-8859-2
Já to ale celé dělal v utf8 - celou DB včetně úvodních query "SET COLLATE". A to se mi ty problémové znaky do DB ani neuložily - stejně jako celý text, co byl po nich.
pak je to jasný...
> stránky psané a uožené v iso-8859-2
> v hlavičce v meta tagu je taky iso-8859-2
před ukládáním do DB použij iconv(), protože prohlížeč odesílá 8859-2, který pak uložíš jako UTF8
Počkej, tys mi nerozuměl - tak jsem to dělal, ale protože to nefachalo, celý jsem to předělal a je to tak, jak jsem to popisoval v příspěvku číslo 1. Ergo všechno v latin2 a isu.
Tááák.
Teď jsem dal i příkaz SET NAMES 'latin2'. Výsledkem je, že to ě,č,ř píše správně a jen š,ž zlobí.
Proč ?
chlape, máě v tom pěknej bordel :-)
To není vtipný ! :D
Dobře, je, ale je to smutný. Uznej, aby se ukazovala jen nějaká diakritika, to už je fakt zrůdnost...
Klid, teprve se pobavíme ;-)
- neměl bys kompletní seznam query, které proběhnou s uložením a vypsáním do DB?
- rád bych viděl meta tagy stránky, která ukládá a vypisuje obsah DB
- co nějaké Headery s kódováním?
Ookej.
Stránka, kde se to vypisuje:
*něco*
<head>
<title>Webové stránky softballového klubu Starý psi</title>
<base href="http://www.starypsi-softball.com/">
<link rel="stylesheet" type="text/css" href="styly.css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/>
<meta name="keywords" content="softball, klub, softballový klub, starý psi">
</head>
*něco*
function nahrad($string) {
$string=strtr($string, "ą", "‘");
$string=strtr($string, "©", "Š");
$string=strtr($string, "ľ", "ž");
return $string;
};
*něco*
$link = mysql_connect("localhost", "starypsi-softball.com", "oldog") or die("Nepovedlo se přihlásit k MySQL.");
mysql_select_db("starypsi-softball_com", $link);
mysql_query("SET NAMES latin2");
$vysledek = mysql_query($query, $link);
while ($row=mysql_fetch_array($vysledek)) {
$date = $row[datum];
$toprint = substr($date, 8, 2);
$toprint .= ".";
$toprint .= substr($date, 5, 2);
$toprint .= ". ";
$toprint .= substr($date, 11, 8);
echo "<tr border=\"none\"";
if($k%2==1) {
echo "bgcolor=\"#645098\">";
} else {
echo "bgcolor=\"#2A0E72\">";
};
echo "<td align=\"center\" width=\"10%\" border=\"none\">";
echo nahrad($row[jmeno])."<br>";
echo "<div class=\"datum\">".$toprint."</div></td>";
echo "<td valign=\"top\" border=\"none\">";
echo nl2br(nahrad($row[text]))."</td></tr>";
$k++;
};
Stránka, kde se to ukládá:
headery žádný, je to jen php skript
# ...::: MySQL PŘIPOJENÍ :::...
$link = mysql_connect("localhost", "starypsi-softball.com", "oldog") or die("Failed to acces MySQL database.");
mysql_select_db("starypsi-softball_com") or die("Failed to select database.");
mysql_query("SET NAMES 'latin2'");
$cas = date("Y-m-d H:i:s");
$query = "INSERT INTO chatroom (jmeno, text, datum)
VALUES ('$jmeno', '$prispevek', '$cas')";
mysql_query($query, $link) or die("Failed to insert article.");
mysql_close();
header("location: index.php?cont=nastenka");
Snad jsem to nezmrvil - takhle by to mělo být. Ta funkce nahrad() je relikt z dob minulých, kdy to fungovalo a naši věc by neměla vůbec ovlivňovat.
nemyslel jsem:
SET NAMES 'charset_name'
SET CHARACTER SET charset_name
viz dokumentace Chapter 10. Character Set Support
Tak já už vážně nevím. Zkoušel jsem
mysql_query("SET CHARACTER SET 'latin2'");
i
mysql_query("SET NAMES 'latin2'");
s apostrofama i bez nich. A nic nefunguje :(
Skutečně tu není nikdo, kdo by věděl jak z toho ven ?
> Tááák.
> Teď jsem dal i příkaz SET NAMES 'latin2'. Výsledkem je, že to ě,č,ř píše správně a jen š,ž zlobí.
> Proč ?
mam pocit, ze problem by mohl byt v tom, ze ty znaky uz jsou v databazi tak ulozene (v ulozenych zaznamech)- a tedy je tak i zobrazi. Jestli pouzivas SET NAMES atd. pokazde hned po pripojeni do databaze (predpokladam, jinak by to nemelo smysl), tak vyzkousej, jestli to tedy dela i pro nove ukladane retezce, resp. znaky s diakritikou.
Dělá. Vždycky do ní vložím ěščřžýáíéĚŠČŘŽÝÁÍÉ jako základní kontrolu.
Mimochodem má tam být SET CHARACTER SET a zároveň SET NAMES ?
ja pouzivam na webu i v db utf8 a mam to takto:
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES utf8");
a vse funguje jak ma.