Autor Zpráva
dsas
Profil *
Dobrý den,

zkouším manuálně zadat některá slova do databáze a ta má přirozeně problém s českou diakritikou. Mohl bych se zeptat, jestli máte zkušenosti s nějakým online převodníkem, kam bych napsal český text a vyhodilo mi to jeho databázovou podobu? Našel jsem tohle, ale tam nefunguje ě a nejsem si tak jistý, jestli je výsledná podoba v ASCII.
Kajman
Profil
Čeština je široce podporovaná. Co to je za db a jak tam vkládáte ta slova?
dsas
Profil *
Jde o klasickou MySql databázi, do které vkládám slova skrze PhpMyAdmin
Kajman
Profil
Jaký je charset u sloupce, kam slova ukládáte?
dsas
Profil *
Charset by měl být utf8_czech_ci

Přikládám ukázku zápisu dat v databázi a výsledek na webu - ibb.co/P433C5R
Kajman
Profil
To vypadá na pravý opak. Ručně zadané záznamy jsou v pořádku a web nebo prohlížeč převádí diakritiku na html entity.

Html stránka je v jakém kódování? Je stejná kódovací stránka nastavená php příkazem po připojení k db?
dsas
Profil *
Přiznám se, že jsem tohle řešení v základu zkopíroval už hotové, abych ušetřil nějaký čas a hlavně na konkrétním příkladu lépe pochopil fungování clean URLs. K tomu jsem si jen doplnil nějaké své další funkce, které k chodu potřebuji. Jak ale vidím, tohle řešení mi spíš přidělalo práci..

Procházel jsem si všechny soubory, které se čtením databáze pracují, ale nikde jsem žádný převod textu na jiné kódování neodhalil. Možná by v to našel chybu někdo z vás - tohle je obsah souboru, který zobrazuje výsledný obsah (je to jen část s databází, dále už jen načtu proměnné do šablony).

<?php

include("db.php");

$str=mysqli_real_escape_string($con,$_GET["str"]);

if(isset($str))
{

    $sql_query="SELECT * FROM blog_posts WHERE str='$str'";
    $result_set=mysqli_query($con,$sql_query) or die('error');
    $user_posts=mysqli_fetch_array($result_set);
    $title=$user_posts['title'];
    $blogpost=$user_posts['content'];
}
if (!isset($title)) {
    $title = "404";
    $blogpost = "Stránka nebyla nalezena";
}

$current_page = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
 echo '<link rel="canonical" href="'.$current_page.'" />'; ?>

obsah db.php je pak tady:
<?php

$dbhost = 'xxx';
$dbuser = 'xxx';
$dbpass = 'xxx';
$dbname = 'xxx';

$con=mysqli_connect($dbhost, $dbuser, $dbpass,$dbname)
or die ();

mysqli_select_db($con,$dbname)
or die ();

?>

Co se týče charsetu v HTML, mám přímo v šabloně <meta charset="UTF-8">, takže by měl obsah být v UTF-8. Je potřeba nějak specifikovat požadavek na data v UTF-8 v načítání dat z DB?
Keeehi
Profil
dsas:
Je potřeba nějak specifikovat požadavek na data v UTF-8 v načítání dat z DB?
Velmi pravděpodobně. Dělá se to pomocí mysqli_set_charset. Nové texty pak už snad budou správně, staré možná budeš muset opravit.
Kajman
Profil
Myslím, že staré záznamy to asi nezboří, když jsou zapsané jako htmlentity. Ale doporučil bych najít, kde k převodu dochází (často je tak nastaven WYSIWYG editor), převod zakázat, polit tam utf-8 sadu. A možná převést v databázi htmlentity na normální znaky. Takto třeba nemusí fungovat vyhledávání.
dsas
Profil *
Díky moc, při čtení dat z databáze jsem využil doporučované mysqli_set_charset, které mi funguje tak jak má - entity jsou nečitelné, české texty jsou v pohodě. V editoru jsem se musel chvíli hrabat a nakonec jsem ho upravil, takže funguje jak má a odesílá data normálně česky.. Problém je tedy vyřešen a já vám děkuji.. Popravdě jsem do teď vůbec nevěděl, že DB podporuje češtinu a vždy jsem si myslel, že jsou entity správně.. Teď už to vím a dám si na to do budoucna pozor..

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