ugrás a tartalomhoz

Ajaxos eseménynaptárnál karakterkódolási hiba, mysql ba..

dc-hungary · 2008. Ápr. 20. (V), 19.57
Üdv!

Van egy ajaxos eseménynaptáram, de annyi problémám van vele, hogy az ékezetes betűket így írja be az adatbázisba:

űűűáááééúúő helyett ŹŹŹåååÊÊúúĹ�

az adatbázisba, ahol a szöveget tárolom, annak a mezőnek a karakterkódolása: latin2_general_ci
Hozzá kell tenni, hogy máshol jó az ékezet, csak ennél nem, de ha én írom be a phpmyadminba az ékezetes betűt, akkor jól jeleníti meg.
Szóval a beírással van a gond. na igen, ez úgy működik hogy egyik php átadja a másiknak a beírt szöveget ajax-al.
és én arra gyanakszok, hogy itt rontja el az ékezeteket..

Próbáltam már a lekérdezésnél UTF8 , LATIN2 , stb.. de egyikel se lett jó.
Szóval a beírást kéne megcsinálni, hogy ékezetesen írja be..

Kiszedtem a scriptből, így csak azt osztom meg, ami ehhez szükséges:


index.php (form):
  1. <div style="display: none; margin-top: 10px;" id="addEventForm">  
  2.     <b>Új esemény</b>  
  3.     <br>  
  4.     Date: <input type="text" size="2" id="evtDay" disabled> <input type="text" size="2" id="evtMonth" disabled> <input type="text" size="4" id="evtYear" disabled>  
  5.     <br>  
  6.     <textarea name="szoveg" id="evtBody" cols="32" rows="5"></textarea>  
  7.     <br>  
  8.     <input type="button" value="Új esemény" onClick="addEvent($F('evtDay'), $F('evtMonth'), $F('evtYear'), $F('evtBody'));">  
  9. </div>  
index.php (javascript):
  1. <script type="text/javascript">  
  2.     function highlightCalendarCell(element) {  
  3.         $(element).style.border = '1px solid #999999';  
  4.     }  
  5.   
  6.     function resetCalendarCell(element) {  
  7.         $(element).style.border = '1px solid #000000';  
  8.     }  
  9.       
  10.     function startCalendar(month, year) {  
  11.         new Ajax.Updater('calendarInternal''rpc.php', {method: 'post', postBody: 'action=startCalendar&month='+month+'&year='+year+''});  
  12.     }  
  13.       
  14.     function showEventForm(day) {  
  15.         $('evtDay').value = day;  
  16.         $('evtMonth').value = $F('ccMonth');  
  17.         $('evtYear').value = $F('ccYear');  
  18.           
  19.         displayEvents(day, $F('ccMonth'), $F('ccYear'));  
  20.           
  21.         if(Element.visible('addEventForm')) {  
  22.             // do nothing.  
  23.         } else {  
  24.             Element.show('addEventForm');  
  25.         }  
  26.     }  
  27.       
  28.     function displayEvents(day, month, year) {  
  29.         new Ajax.Updater('eventList''rpc.php', {method: 'post', postBody: 'action=listEvents&&d='+day+'&m='+month+'&y='+year+''});  
  30.         if(Element.visible('eventList')) {  
  31.             // do nothing, its already visble.  
  32.         } else {  
  33.             setTimeout("Element.show('eventList')", 300);  
  34.         }  
  35.     }  
  36.       
  37.     function addEvent(day, month, year, body) {  
  38.         if(day && month && year && body) {  
  39.             // alert('Add Event\nDay: '+day+'\nMonth: '+month+'\nYear: '+year+'\nBody: '+body);  
  40.             new Ajax.Request('rpc.php', {method: 'post', postBody: 'action=addEvent&d='+day+'&m='+month+'&y='+year+'&body='+body+'', onSuccess: highlightEvent(day)});  
  41.             $('evtBody').value = '';  
  42.         } else {  
  43.             alert('There was an unexpected script error.\nPlease ensure that you have not altered parts of it.');  
  44.         }  
  45.           
  46.         // highlightEvent(day);  
  47.     } // addEvent.  
  48.       
  49.     function highlightEvent(day) {  
  50.         Element.hide('addEventForm');  
  51.         $('calendarDay_'+day+'').style.background = '#<?= $eventColor ?>';  
  52.     }  
  53.       
  54.     function showCP() {  
  55.         Element.show('cpBox');  
  56.     }  
  57.       
  58.     function deleteEvent(eid) {  
  59.         confirmation = confirm('Are you sure you wish to delete this event?\n\nOnce the event is deleted, it is gone forever!');  
  60.         if(confirmation == true) {  
  61.             new Ajax.Request('rpc.php', {method: 'post', postBody: 'action=deleteEvent&eid='+eid+'', onSuccess: Element.hide('event_'+eid+'')});  
  62.         } else {  
  63.             // Do not delete it!.  
  64.         }  
  65.     }  
  66. </script>  
rpc.php (beszúrás az adatbázisba):
  1. case 'addEvent':  
  2.     $day = $_POST['d'];  
  3.     $month = $_POST['m'];  
  4.     $year = $_POST['y'];  
  5.     $body = $_POST['body'];  
  6.       
  7.     $timeStamp = mktime(0,0,0, $month$day$year);  
  8.     $bodyF = addslashes(trim($body));  
  9.     mysql_query("INSERT INTO event (text, timestamp) VALUES ('$body', '$timeStamp')");  
  10.     break;  
rpc.php (lekérdezés, a SET NAMES-nál már többel is próbálkoztam, és egyik se lett jó.. [LATIN2, UTF8]):
  1. case 'listEvents':  
  2.         $day = $_POST['d'];  
  3.         $month = $_POST['m'];  
  4.         $year = $_POST['y'];  
  5.           
  6.         $timeStamp = mktime(0,0,0, $month$day$year);  
  7.           
  8.         $eventQuery = mysql_query("SET NAMES `LATIN2` COLLATE `latin2_general_ci`");  
  9.         $eventQuery = mysql_query("SELECT id, text FROM event WHERE timestamp='$timeStamp' ORDER BY id DESC");  
  10.         if($eventQuery) {  
  11.             if(mysql_num_rows($eventQuery) >0) {  
  12.                 echo '<br><b>Események a következő napra: 'date("Y"$timeStamp) .'/'date("m"$timeStamp) .'/'date("d"$timeStamp) .'</b>';  
  13.                 for($i=0; $i<mysql_num_rows($eventQuery); $i++) {  
  14.                     if($i % 2) { $bgColor = '#'$iteratorColor1 .''; } else { $bgColor='#'$iteratorColor2 .''; }  
  15.                     extract(mysql_fetch_array($eventQuery), EXTR_PREFIX_ALL, 'e');  
  16.                       
  17.                     if($_SESSION[admin_session] == "true") {  
  18.                         echo '<div style="background-color: '$bgColor .'; margin-bottom: 4px; padding: 1px;" id="event_'.$e_id.'">  
  19.                                 <div>  
  20.                                     '. nl2br($e_text) .'  
  21.                                 </div>  
  22.                                 <div style="font-size: 9px;">  
  23.                                     <span style="color: blue; text-decoration: underline; cursor: pointer;" onClick="deleteEvent('.$e_id.')">  
  24.                                         Delete this event  
  25.                                     </span>  
  26.                                 </div></div>';  
  27.                     } else {  
  28.                         echo '<div style="background-color: '$bgColor .'; margin-bottom: 4px; padding: 1px;">  
  29.                                 '. nl2br($e_text) .'  
  30.                             </div>';    
  31.                     }  
  32.                 } // for.  
  33.             } else {  
  34.                 echo 'Erre a napra nincs esemény bejegyezve!';  
  35.             }  
  36.         } else {  
  37.             echo 'Hiba az adatok lekérdezésekor!';  
  38.         }  
  39.           
  40.         break;  
próbálkoztam
  1. <meta content="text/html; charset=ISO-8859-2" http-equiv="content-type">  
-al is, de nem változtatott a problémán..


Mi lehet a probléma?
 
1

Karakterkódolás

janoszen · 2008. Ápr. 20. (V), 20.07
Lehet, hogy triviális, de a következők megvannak?

  • Az AJAXot hívó oldalt UTF-8-ban küldöd ki?
  • A mindenféle RPC-k UTF-8 headerrel mennek ki?
  • A tábla karakterkódolása UTF-8?
  • Az adatbázis kapcsolat kódolása UTF-8?


Ha ez mind megvan, akkor elvileg jól kellene menjen. Vegyes karakterkódolásokkal már több baj van.
2

thx

dc-hungary · 2008. Ápr. 20. (V), 20.52
Thanks, megoldottam :)
teljesen átalakítottam, kiszedtem belőle az ajax részt és mostmár tökéletes