Avatar
oggymotslp
Člen
Avatar
oggymotslp:

Ahojte,

mám tu problém. Mám novinky a na jedné stránce to v pohodě vypíše nadpisy a na druhé asi takto "Nemáme zájem ". V databázi je to ukládané tím tipem "Nemáme zájem ". Nevím kde je chyba, asi někde v převodu znaků. Databáze má nastavené formátování na UTF-8 czech a stránka má v hlavičce charset taky na UTF-8.

Na stránce kde to nefunguje je to takto:

<?php
        require_once 'connect.php';
        include 'Db.php';
        Db::connect($server, $user, $db, $pass);
        mysql_query("SET character_set_results=utf8");
        mysql_query("SET character_set_connection=utf8");
        mysql_query("SET character_set_client=utf8");
        mysql_query("SET names='utf8';");

        if (isset($_GET['id']))
        {

        }
        else
        {
                header('Location: index.php');
        }

        $row = Db::queryOne('
        SELECT *
        FROM novinky
        WHERE id=?
        ', $_GET['id']);


        ?>
        <article>
                <header>
                        <h2><?php if (isset($row['titulek'])) echo($row['titulek']); ?></h2>
                        <div class="delicObsah"></div>
                </header>
                <section>
                <i><a href="index.php">Blog</a> > <?php if (isset($row['titulek'])) echo($row['titulek']); ?></i>
                </br>
                <?php if (isset($row['obsah'])) echo($row['obsah']); ?>
                </br>
                <?php if (isset($row['datum'])) echo($row['datum']); ?>
                </section>
        </article>

Byl bych rád za pomoc :).

Odpovědět 15. září 17:35
Proč to dělat jednoduše, když to jde i složitě :D
Avatar
mkub
Redaktor
Avatar
Odpovídá na oggymotslp
mkub:

a co takto urcit platne kodovanie znakov v PHP kode, ako aj si vybrat kodovanie znakov v MySQL pri vytvarani tabuliek a databaze, ako aj na webovej stranke?

 
Nahoru Odpovědět 15. září 18:07
Avatar
oggymotslp
Člen
Avatar
Odpovídá na mkub
oggymotslp:

S problémem jsem postoupil a převedl databázi do UTF-8, ale zjistil jsem, že chyba není v databázi, ale v zápisu přes formulář. Něco zapíšu a uloží to do databáze s těmi znaky.

Skript na vytváření novinek:

<?php
        session_start();
        if(!isset($_SESSION["login"]))
        {
                header('Location: login.php');
                exit();
        }
        include 'connect.php';

        $novinka = array(
        'titulek' => '',
        'obsah' => '',
        'datum' => '',
        );


        if($_POST)
        {
                $titulek = $_POST["titulek"];
                $obsah = $_POST["obsah"];
                $datum = date("H:i d.m.Y", time());

                $sql = "INSERT INTO novinky (titulek, obsah, datum) VALUES ('$titulek', '$obsah', '$datum')";

                if($con->query($sql))
                {
                        header('Location: administrace.php');
                        exit();
                }
        }
?>

<!DOCTYPE html>
<html lang="cs">
<head>
        <meta charset="UTF-8">
        <title>Editor</title>
</head>
<body>
        <form method="POST">
                <label for="titulek">Titulek</label>
                <input type="text" name="titulek">
                <textarea name="obsah"></textarea>
                <input type="submit" value="Odeslat">
        </form>

        <script type="text/javascript" src="//tinymce.cachefly.net/4.0/tinymce.min.js"></script>
        <script type="text/javascript">
                tinymce.init({
                        selector: "textarea[name=obsah]",
                        plugins: [
                                "advlist autolink lists link image charmap print preview anchor",
                                "searchreplace visualblocks code fullscreen",
                                "insertdatetime media table contextmenu paste"
                        ],
                        toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
                        entities: "160,nbsp",
                        entity_encoding: "named",
                        entity_encoding: "raw"
                });
        </script>
</body>
</html>
Nahoru Odpovědět 15. září 18:09
Proč to dělat jednoduše, když to jde i složitě :D
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:

Muzes zkusit udelat formu atribut accept-charset, taky tinyMCE jde i bez RAW modu a da se mu nastavit cestina pres language : "cs_CZ" (musis si stahnout soubor).

Ale muj tip je, ze by jsi mel v php hned po pripojeni do DB spustit query "SET NAMES UTF8"

Editováno 15. září 20:33
 
Nahoru Odpovědět 15. září 20:32
Avatar
Odpovídá na Jiří Fencl
Josef Kuchař (Pepa489):

už je to fixnuté, stačilo použít pdo místo query()

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 15. září 20:36
2x piš, jednou debuguj
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.