Проблема с ajax и отправкой нелатинских символов - PullRequest
0 голосов
/ 01 мая 2010

Публикация нелатинских языков с помощью ajax + jquery не сохраняет в mysql правильный текст.

То, что я сделал, это:

  • Я получаю несколько переведенных слов из API Google для перевода.
  • Запрос ajax показывает правильные переводы для всех языков.
  • Но когда я пытаюсь вставить это в БД, он появляется в php мой администратор как искаженный текст
  • Я добавил AddDefaultCharset UTF-8 в файл .htaccess в корневом каталоге.
  • Я попытался установить заголовок в php на utf-8, но это не сработало.
  • Я попытался добавить contentType в настройку ajax, но это также не сработало.

Любые предложения приветствуются.

Я использую следующий код jquery:

Я вижу переведенный текст, отправленный на страницу save_translation.php

 var d = {"english":"<?php echo $w;?>","addwords":translated};
   data = jQuery.param(d);
   $.ajax({
     type:"POST",
     data:data,
     url:"save_translation.php"
     });

Каждое поле установлено в utf8_general_ci

ОБНОВЛЕНО: ответы:

Ajax post

английский: спасибо addwords: baie dankie | falemnderit | شكرا | дзякуй | благодаря | gràcies | 谢谢 | 谢谢 | 謝謝 | hvala vam | děkuji | tak | dank u | спасибо | tänan teid | саламат | kiitos | мерси | грацас | данке | σας ευιαα תודה | धन्यवाद | köszönöm | þakka þér | терима касих | go raibh maith agat | grazie | あ り が と う | 감사 합니다 | пальмы | č aū | | спасибо | хвала | ďakujem | хвала | gracias | asante | тэкс | salamat | คุณ ขอบคุณ | teşekkür ederim | спасибі | cảm ơn bạn | ддиолх 'ch | אַ דאַנק

Выход на стороне сервера

английский: спасибо

baie dankie | falemnderit | شكرا | | ку | gr cies | | α α α α α α α α α α α υ υ | υ υ α | | σ σ χ α ρ | | | धन्यवाद | köszönöm | þakka þér | терима касих | go raibh maith agat | grazie | あ り が と う | 감사 합니다 | d d d | | хвала | ďakujem | hvala | gracias | асанте | тэкс | salamat | คุณ ขอบคุณ | teşekkür ederim | спасибі | cảm ơnạạạ d d d | | | | | | * * * * * * * * * * * * * * * *

Каждое поле установлено в utf8_general_ci

PhpMyAdmin

спасибо | baie dankie | falemnderit | Ùƒ´ÙƒØ ± | ´ Ð Ñ º ¹ ¹ ¹ gr gr gr gr gr gr gr gr ° ° ° ¢ h h h h h h | | thank thank thank Î Î Î Î Î Î Î Î Î Î Î Î Î Î Î Î Î ± ÏÎ¹ÏƒÏ „ÏŽ | × ª × • ד × ”| ¤ ¤¨ ¤¨ ¤¨ ¤ ¤ ¤ ¤ ¤ ¤¦ ¤¦ ¤¦ ¤¦ ¤¦ ¤¦ ¤¦ | | | | | | | | | ka ka ka ka ka r r r r r ter ter | maith agat | grazie | ã‚ã‚ŠãŒã¨ã † | ° ° ì‚¬í • © ë ‹ˆë‹ ¤ | paldies | aÄiÅ «| ° ¼¼ | terima kasih | nirringrazzjak | такк скал ду ха | ØªØ´Ú © Ø ± از شم ا | dziÄ ™ kujÄ ™ | obrigado | mulÅ £ umesc | ÑпР° ÑиР± о | …… вР° Ð »Ð ° | Äakujem | hvala | gracias | asante | tack | salamat | ค ¸¸¸¸à¸ “à¸àà บค ุภ“| teÅŸekkür ederim | ÑпР° ÑÐ |Ð ± Ñ– | cẠ£ mÆ¡n bạn | ddiolch 'ch | × Ö · × «× Ö · × × §

1 Ответ

1 голос
/ 01 мая 2010

Вероятно, будет достаточно использовать функцию JavaScript encodeURIComponent.

Если вы не добавляете руководство к параметрам в URL, например, myUrl + '?param1=' + param1 + '&param2' + param2, но используете конструкцию myUrl + '?' + jQuery.param({param1:param1, param2:param2}), то кодирование с учетом функции encodeURIComponent сделает jQuery для вас. В случае, если все символы '&' и строки 'paramX =' также будут добавлены для вас.

Но лучший способ использовать параметр data метода jQuery.ajax. Если вы используете

jQuery.ajax({
    url: myUrl,
    data: {param1:param1, param2:param2},
    //...
});

тогда к вашему URL будет добавлено '?param1=' + param1 + '&param2' + param2 с соответствующей полной кодировкой от jQuery.

Если мои советы вам не помогут, опубликуйте пример кода.

ОБНОВЛЕНО : После публикации тестовых данных стало ясно, что у вас нет проблем с запросом ajax. Вы показываете, что данные сервера выглядят абсолютно корректно. Так что ваша проблема где-то между PHP и MYSQL. Я не работаю с этими двумя продуктами и теперь не могу вам помочь. Вероятно, информация по следующей ссылке может помочь вам строковая проблема кодировки utf-8 с PHP и MySQL? . Вы также можете попробовать

mysql_query("SET NAMES 'utf8'"); 
mysql_query("SET CHARACTER SET 'utf8'");

Желаю вам больших успехов и быстрого решения вашей проблемы. Привет

P.S. В вашем запросе ajax вы можете напрямую использовать data: {"english":"<?php echo $w;?>","addwords":translated}. Вызов jQuery.param сделает jQquery для вас, потому что тип data не является строкой. Но это абсолютно зависит от ваших проблем.

...