Autor Zpráva
vodys
Profil *
Zdravím, potýkám se s problémem.
Na svých webových stránkách mám nastavený charset windows-1250.
Jedná se o statické stránky, nejsou propojené s databází.

Ale nyní jsem si přidal komentáře na stránku, když vepíšu komentář, zobrazí se jak má, ale po aktualizaci stránky se z diakritiky stane jen čěščšěěšč ..
Přikládám kód, který mám na komentáře a prosím o určení chyby, nebo radu na jaký jazyk mám nastavit výstup z DB, aby se vše zobrazovalo jak má.

add-comment.php
<?php
extract($_POST);
if($_POST['act'] == 'add-com'):
$name = htmlentities($name, ENT_QUOTES, 'UTF-8');
$email = htmlentities($email, ENT_QUOTES, 'UTF-8');
$comment = htmlentities($comment, ENT_QUOTES, 'UTF-8');
    // Connect to the database
    include('../config.php'); 
    
    // Get gravatar Image 
    // https://fr.gravatar.com/site/implement/images/php/
    $default = "mm";
    $size = 35;
    $grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . $default . "&s=" . $size;

    if(strlen($name) <= '1'){ $name = 'Guest';}
    //insert the comment in the database
    mysql_query("INSERT INTO comments (name, email, comment, id_post)VALUES( '$name', '$email', '$comment', '$id_post')");
    if(!mysql_errno()){
?>

    <div class="cmt-cnt">
        <img src="<?php echo $grav_url; ?>" alt="" />
        <div class="thecom">
            <h5><?php echo $name; ?></h5><span  class="com-dt"><?php echo date('d-m-Y H:i'); ?></span>
            <br/>
               <p><?php echo $comment; ?></p>
        </div>
    </div><!-- end "cmt-cnt" -->

    <?php } ?>
<?php endif; ?>

index.php
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<?php 
// Connect to the database
include('kom/config.php'); 
$id_post = "1"; //the post or the page id
?>
<div class="cmt-container" >
    <?php 
    $sql = mysql_query("SELECT * FROM comments WHERE id_post = '$id_post'") or die(mysql_error());;
    while($affcom = mysql_fetch_assoc($sql)){ 
        $name = $affcom['name'];
        $email = $affcom['email'];
        $comment = $affcom['comment'];
        $date = $affcom['date'];

        // Get gravatar Image 
        // https://fr.gravatar.com/site/implement/images/php/
        $default = "mm";
        $size = 35;
        $grav_url = "http://www.gravatar.com/avatar/".md5(strtolower(trim($email)))."?d=".$default."&s=".$size;

    ?>
    <div class="cmt-cnt">
        <img src="<?php echo $grav_url; ?>" />
        <div class="thecom">
            <h5><?php echo $name; ?></h5><span data-utime="1371248446" class="com-dt"><?php echo $date; ?></span>
            <br/>
            <p>
                <?php echo $comment; ?>
            </p>
        </div>
    </div><!-- end "cmt-cnt" -->
    <?php } ?>


    <div class="new-com-bt">
        <span>Napište komentář ...</span>
    </div>
    <div class="new-com-cnt">
        <input type="text" id="name-com" name="name-com" value="" placeholder="Jméno" />
        <input type="text" id="mail-com" name="mail-com" value="" placeholder="Váš email" />
        <textarea class="the-new-com"></textarea>
        <div class="bt-add-com">ODESLAT</div>
        <div class="bt-cancel-com">zrušit</div>
    </div>
    <div class="clear"></div>
</div><!-- end of comments container "cmt-container" -->


<script type="text/javascript">
   $(function(){ 
        //alert(event.timeStamp);
        $('.new-com-bt').click(function(event){    
            $(this).hide();
            $('.new-com-cnt').show();
            $('#name-com').focus();
        });

        /* when start writing the comment activate the "add" button */
        $('.the-new-com').bind('input propertychange', function() {
           $(".bt-add-com").css({opacity:0.6});
           var checklength = $(this).val().length;
           if(checklength){ $(".bt-add-com").css({opacity:1}); }
        });

        /* on clic  on the cancel button */
        $('.bt-cancel-com').click(function(){
            $('.the-new-com').val('');
            $('.new-com-cnt').fadeOut('fast', function(){
                $('.new-com-bt').fadeIn('fast');
            });
        });

        // on post comment click 
        $('.bt-add-com').click(function(){
            var theCom = $('.the-new-com');
            var theName = $('#name-com');
            var theMail = $('#mail-com');

            if( !theCom.val()){ 
                alert('You need to write a comment!'); 
            }else{ 
                $.ajax({
                    type: "POST",
                    url: "kom/ajax/add-comment.php",
                    data: 'act=add-com&id_post='+<?php echo $id_post; ?>+'&name='+theName.val()+'&email='+theMail.val()+'&comment='+theCom.val(),
                    success: function(html){
                        theCom.val('');
                        theMail.val('');
                        theName.val('');
                        $('.new-com-cnt').hide('fast', function(){
                            $('.new-com-bt').show('fast');
                            $('.new-com-bt').before(html);  
                        })
                    }  
                });
            }
        });

    });
</script>

table.sql
CREATE TABLE IF NOT EXISTS `comments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) NOT NULL,
  `email` varchar(60) NOT NULL,
  `comment` text NOT NULL,
  `id_post` int(11) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

Nejlépe poprosím o radu co, kam přidat, aby to fungovalo jak má.
Děkuji
Kajman
Profil
V souboru config.php máte nejspíše připojení do databáze. Hned po připojení tam volejte
mysql_query("SET NAMES cp1250")
viz faq

A v tom add-comment.php si opravte řádky 3-5
$name = mysql_real_escape_string(htmlentities($name, ENT_QUOTES, 'UTF-8'));
$email = mysql_real_escape_string(htmlentities($email, ENT_QUOTES, 'UTF-8'));
$comment = mysql_real_escape_string(htmlentities($comment, ENT_QUOTES, 'UTF-8'));
Doby92
Profil *
vodys:
Není divu když máš nastaveno v hlavičce windows-1250 a v databázi a v kódu zas jiné kódování. Zkus nastavit vše na stejné kódování.
Kajman
Profil
Doby92:
Pokud je kódování stránek podmnožinou kódování pro ukládání v databázi, tak to bude fungovat také - jen se přes set names musí mysql říct kódování použité pro komunikaci.

Při sjednocení se ale ušetří nutnost konverze.
vodys
Profil *
Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 4 Warning: mysql_real_escape_string(): A link to the server could not be established in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 4 Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 5 Warning: mysql_real_escape_string(): A link to the server could not be established in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 5 Warning: mysql_real_escape_string(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 6 Warning: mysql_real_escape_string(): A link to the server could not be established in /DISK2/WWW/beta/kom/ajax/add-comment.php on line 6
Kajman
Profil
vodys:
Ještě je potřeba přehodit řádky. Tedy mysql_real_escape_string používat až po připojení databáze vykonané includem souboru config.php.
vodys
Profil *
Opravil jsem, vepíše se správně na stránku, ale po aktualizaci se opět z DB vypíše špatná diakritika..
"Ä›šĹ"

ačkoliv jsem v configu nastavil kódování pro výstup z db.™

<?php
$mysql_host = "sql18.pipni.cz";
$mysql_database = "comment_sys"; //create the database called "comment_sys"
$mysql_user = "****";
$mysql_password = "****";

mysql_connect($mysql_host,$mysql_user,$mysql_password);
mysql_select_db($mysql_database); 
mysql_query("SET NAMES cp1250");
?>



První malý úspěch je, že se z databáze strávně vypisují písmena "šýáíé" .. další jako je "ěčřž" to vypisuje špatně..
Kajman
Profil
Jaké porovnání máte u sloupců tabulky comments? Když se podívate adminerem na data v ní, tak jsou v pořádku?

Také by problémy mohly nastat tím, že voláte htmlentities, říkáte mu, že jsou data v UTF-8, ale jsou ve windows-1250 kódování.
vodys
Profil *
U výstupů $name $comment $email mám porovnání cp1250_general_ci
Já sice volám htmlentities v UTF-8, ale SET NAMES mám nastavené pro výstup ve win1250

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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