Πρόβλημα με encoding ελληνικών χαρακτήρων.

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
AresGR
Δημοσιεύσεις: 4
Εγγραφή: 02 Απρ 2011 14:28

Πρόβλημα με encoding ελληνικών χαρακτήρων.

Δημοσίευση από AresGR » 27 Οκτ 2011 23:47

Καλησπέρα,

Έχω ένα θέμα encoding ελληνικών χαρακτήρων απο php σε MySQL. Για να εξηγήσω τι εννοώ:
Έχω φτιάξει μια μηχανή αναζήτησης Live Search μέσα από την οποία αντλώ δεδομένα από την Βάση (phpMyAdmin) σε πραγματικό χρόνο (μέσα από AJAX), τρέχοντας σε αυτήν ερωτήματα με βάση τις εισόδους του χρήστη. Σε ένα πεδίο (common greek) υπάρχουν τιμές στα ελληνικά. Αυτές οι τιμές είναι αποθηκευμένες στην βάση με τον εξής τρόπο:
π.χ.
ελληνικά= &#949 ;&#955 ;&#955 ;&#951 ;&#957 ;&#953 ;&#954 ;&#940 ; (χωρίς κενό πριν το ; )

Τα δεδομένα εμφανίζονται κανονικά στην σελίδα στα ελληνικά. Όμως εισάγοντας ελληνικούς χαρακτήρες από την φόρμα για την αναζήτηση στην Βάση τα αποτελέσματά μου είναι 0. Προφανώς υπάρχει θέμα με την κωδικοποίηση των τιμών που δίνει ο χρήστης και δεν μετατρέπονται κατά τον παραπάνω τρόπο ώστε να γίνει σωστά το query. Επομένως αν εγώ ψάξω π.χ. για την λέξη "ελλ" τότε και η MySQL θα ψάξει για το "ελλ" και όχι για το "&#949 ;&#955 ;&#955 ;" όπως θα έπρεπε κανονικά.

Η δομή της σελίδας είναι η εξής:
Ο χρήστης εισάγει δεδομένα από το index.html και στην συνέχεια συντάσεται το query με javascript και αποστέλεται μέσα από AJAX σε ένα αρχείο results.php όπου γίνεται σύνδεση με την βάση και στέλνονται τα ερωτήματα.

Στο index.html όπως και στο results.php χρησιμοποιώ utf-8 encoding με την παρακάτω γραμμή κώδικα:

Κώδικας: Επιλογή όλων

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Το results.php περιέχει τα εξής:

Κώδικας: Επιλογή όλων

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Show Results</title>
</head>

<body>
<?php

echo "CHECK&#58; ".$_POST&#91;'query'&#93;."<br/>";

/* Connection to Database */
$con=mysql_connect&#40;"κάτι","username","password"&#41;;
if &#40;!$con&#41;
  &#123;
  die&#40;'Could not connect&#58; ' . mysql_error&#40;&#41;&#41;;
  &#125;
/*mysql_query&#40;"SET NAMES 'utf8'", $con&#41;;
mysql_query&#40;"SET CHARACTER SET 'utf8'", $con&#41;;*/

mysql_set_charset&#40;'utf8',$con&#41;;
mysql_select_db&#40;"ptyxiakh",$con&#41;;

$charset = mysql_client_encoding&#40;$con&#41;;
echo "The current character set is&#58; $charset\n";

$result=mysql_query&#40;$_POST&#91;'query'&#93;,$con&#41;;

echo "<b>Found <span style='color&#58;red;'>".mysql_num_rows&#40;$result&#41;."</span> results&#58;</b>";
echo "<div id='container'>";
echo "<table class='myheaders' style='width&#58;100%;'><tr><th style='width&#58;25%;'>Botanical Name</th><th style='width&#58;15%;'>Common Greek</th><th style='width&#58;15%;'>Common English</th><th style='width&#58;45%;'>Synonym</th></tr></table>";
echo "<div id='window'><table class='myt' style='width&#58;100%;'>";
$i=0;
while &#40;$row=mysql_fetch_array&#40;$result&#41;&#41;&#123;
	if&#40;$i%2==0&#41; $backgr="background-color&#58;#F3F3F3;";
	else $backgr="background-color&#58;#AEDDAC;";
	echo "<tr style='".$backgr."'><td style='width&#58;25%;' class='mytd'><a rel='shadowbox&#91;myresults&#93;;height=650;width=1000' title='".$row&#91;'botanical_name'&#93;."' href='../details/index.php?id=$row&#91;plant_id&#93;'>".$row&#91;'botanical_name'&#93;."</a></td>";
	echo "<td style='width&#58;15%;' class='mytd'>".$row&#91;'common_greek'&#93;."</td>";
	echo "<td style='width&#58;15%;' class='mytd'>".$row&#91;'common_english'&#93;."</td>";
	echo "<td style='width&#58;45%;' class='mytd'>".$row&#91;'synonym'&#93;."</td></tr>";
	$i++;
&#125;
echo "</table></div></div>";
?>
</body>
</html>
Όπως φαίνεται και από τον κώδικα έχω ήδη χρησιμοποιήσει τις εντολές

Κώδικας: Επιλογή όλων

mysql_query&#40;"SET NAMES 'utf8'", $con&#41;;
mysql_query&#40;"SET CHARACTER SET 'utf8'", $con&#41;;
και δεν με έχουν βοηθήσει καθόλου.
Επίσης χρησιμοποιώ την εντολή

Κώδικας: Επιλογή όλων

mysql_set_charset&#40;'utf8',$con&#41;;
και με το

Κώδικας: Επιλογή όλων

$charset = mysql_client_encoding&#40;$con&#41;;
echo "The current character set is&#58; $charset\n";
επιβεβαιώνω ότι το charset είναι σε utf8.

Υπάρχει καμία πρόταση για το πώς να αντιμετωπίσω αυτό το πρόβλημα? Θα εκτιμούσα την οποιαδήποτε βοήθεια. Μπορείτε να δείτε την σελίδα από εδώ.

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πρόβλημα με encoding ελληνικών χαρακτήρων.

Δημοσίευση από gvre » 28 Οκτ 2011 01:10

Δες αν χρησιμοποιείς html_entities εκεί που κάνεις την εισαγωγή στη βάση. Αν ναι, σβήσε τα.
Αν χρησιμοποιείς tinymce, πρόσθεσε στο init το

Κώδικας: Επιλογή όλων

entities &#58; ""
Τέλος, φτιάξε ένα script το οποίο θα τραβήξει τα δεδομένα από τη βάση, θα τα περάσει από μια html_entity_decode και θα τα περάσει ξανά στη βάση.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης