Autor Zpráva
MyShare
Profil
Zdravím mám tento kód pre chat a pri zapísaní Ď Ž Š čiže ak použijem diakritiku tak my to pri zobrazení vyhodí Ž Å Ä prosím ako mám zadať to aby mi tú diakritiki zapísalo aj do indexu aj do DB Ďakujem.

<?php
include 'core/init.php';
protect_widtgets_applications();

if (isset($_POST['send_message'])) {
    $shout = protect($_POST['shout']);
    
    if (strlen($shout) > 1024) {
        echo 'Prekročili ste limit 1024 znakov!';
    } else if ($shout !== '') {
        if (isset($_POST['name'])) {
            $name =  protect($_POST['name']);
            
            $q = mysql_query("SELECT `username` FROM `users` WHERE `username` = '$name'");
            if (mysql_num_rows($q) > 0) {
                echo 'Obsadené!';
            } else if ($name !== '') {
                if (strlen($name) > 32) {
                    echo 'Prekročené znaky v mene 32!';
                } else {
                    mysql_query("INSERT INTO `shouts` SET
                                 `user_id` = 0,
                                 `date_posted` = NOW(),
                                 `message` = '$shout',
                                 `name` = '$name'");
                }
            }
        } else {
            mysql_query("INSERT INTO `shouts` SET
                         `user_id` = {$_SESSION['uid']},
                         `date_posted` = NOW(),
                         `message` = '$shout'");
        }
    }
}
?>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="content-type" charset="UTF-8" />
 <link rel="stylesheet" type="text/css" href="css/style.css" />
 <meta name="robots" content="noindex, nofollow" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
 $(document).ready(function() {
     $('#window').load('shouts.php');
     setInterval(function() {
     $('#window').load('shouts.php');   
     }, 10000);
 });
</script>
<title>Bla ...</title>
</head>
<body class="home">
<div id="background_bg"></div>
<div class="logo"><img /></div>
<div class="headertxt"><label>Online Chat ...</label></div>
<div id="window">

 </div>
 <form action="" method="post">
  <?php if ( ! isset($_SESSION['uid']) ) : ?>
  <div>
   <span>Username:</span>
   <input type="text" name="name" />
  </div>
  <?php endif; ?>
 <div class="textarea">
  <input type="text" name="shout" />
  <button type="submit" name="send_message" class="send_message">Odoslať</button>
 </div>
 </form>
</body>
</html>



<?php
include 'core/init.php';

$q = mysql_query("SELECT `users`.`username`, `shouts`.`user_id`, `shouts`.`message`, `shouts`.`name`
                  FROM `users`
                  INNER JOIN `shouts` ON `users`.`user_id` = `shouts`.`user_id`
                  ORDER BY `shouts`.`id` DESC
                  LIMIT 100"); 

$shouts = array();

while ($r = mysql_fetch_assoc($q)) {
    $shouts[] = array(
    'user_id' => $r['user_id'],
    'username' => $r['username'],
    'message' => $r['message'],
    'name' => $r['name']
    );
}
foreach ($shouts as $s) {
    $user = ($s['user_id'] > 0) ? $s['username'] : $s['name'];
    echo $user . '<span class="nap">(napísal/a)</span>' . ' - ' . '<span class="text">' . $s['message'] . '</span>' . '<br />';
}
?>
Martin02
Profil
MyShare:
Máš nastavené správné kódování v MySQL a v připojování k ní?
MyShare
Profil
Martin02:
Kódovanie v mysql mám utf8_general_ci
a pripojenie je
<?php
$connect_errors = 'Momentálne je DB Off';
mysql_connect('localhost', 'blablabla', 'blablabla') or die($connect_errors);
mysql_select_db('blablabla') or die($connect_errors);
?>
Martin02
Profil
MyShare:
K tomu připojení přidej toto:
mysql_set_charset("utf8")
MyShare
Profil
Martin02:
<?php
$connect_errors = 'Momentálne je DB Off';
mysql_connect('localhost', 'blablabla', 'blablabla') or die($connect_errors);
mysql_select_db('blablabla') or die($connect_errors);
mysql_set_charset("utf8");
?>
Bez zmeny
Tori
Profil
MyShare:
Zkuste nastavit kódování ([#4]), pak vložit do DB nějaký řádek s diakritikou, a nakonec načíst z DB a zobrazit ten nově vložený řádek plus několik starších. Všechno jedním skriptem. Zobrazí se vám diakritika stejně špatně u starého i nového záznamu, anebo v tom bude rozdíl? (= chci zjistit, jestli náhodou ta data nejsou už špatně uložená.)
Keeehi
Profil
MyShare:
A pro nové záznamy to dělá také?
MyShare
Profil
Keeehi:
Áno aj pre nové záznamy to robí to isté
stačí že napíše žaba a je s toho žaba v php a v mysql je to zas &Aring;&frac34;aba


Tori:
Takže ani nemusím meniť kódovanie keď v mysql prepíšem &Aring;&frac34;aba na žaba a aktualizujem php zobrazí sa mi to správne aj s diakrtitkou
Keeehi
Profil
Když to tak vidí, tak bych si tipl, že za to možná může funkce protect() na 6. řádku. Co se vypíše, pokud za ní přidáte var_dump($shout);
MyShare
Profil
Keeehi:
Myslíš ako za
if (isset($_POST['send_message'])) {
    $shout = protect($_POST['shout']);

pridať
if (isset($_POST['send_message'])) {
    $shout = protect($_POST['shout']);
    var_dump($shout);



A tu je protect.php kód
<?php
function protect($v) {
    $v = mysql_real_escape_string($v);
    $v = htmlentities($v, ENT_QUOTES);
    $v = trim($v);
    
    return $v;
}
?>
Keeehi
Profil
MyShare:
Myslíš ako za
Ano, to přesně myslím, co se pak vypíše? Mám podezření, že už právě v htmlentites pak bude problém. Není ten includovaný soubor v jiném kódování?
MyShare
Profil
Keeehi:
ak to dám s tým var_dump tak vypíše string(37) "Ž Å Ä�" a v DB zas &Aring;&frac12; &Aring;&nbsp; &Auml; kódovanie som skúšal ale nezabralo.


Takže som to vyriešil tým, že do protect.php som miesto
<?php
function protect($v) {
    $v = mysql_real_escape_string($v);
    $v = htmlentities($v, ENT_QUOTES);
    $v = trim($v);
    
    return $v;
}
?>
upravil na
<?php
function protect($v) {
    $v = mysql_real_escape_string($v);
    $v = htmlspecialchars($v, ENT_QUOTES);
    $v = trim($v);
    
    return $v;
}
?>
a aj do DB mi to zapíše aj s diakritikou aj na idex.php mi to vypíše s diakritikou.
Keeehi
Profil
MyShare:
Schválně, pokud to teď upravíš zpátky, zase se to rozbije?
MyShare
Profil
Keeehi:
Ak to vrátim späť a aktualizujem nič sa nedeje ale ako náhle použijem diakrit. tak je to rozbité ale ak vrátim späť htmlspecialchars tak už to zas funguje.
Keeehi
Profil
Ok, jen jsem tím chtěl zjistit, kde byl problém. V kódování souboru pravděpodobně ne.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: