Аякс портит норвежских персонажей - PullRequest
0 голосов
/ 02 апреля 2009

Я пытаюсь взять значения из <textarea> и передать его через XMLHttpRequest на страницу PHP, которая добавляет контент в базу данных.

Однако, когда он достигает базы данных, символы «å æ ø» преобразуются в «Ã ¥ æ û.

Я искал все выше и ниже и пытался перейти на UTF-8, пытался использовать версии JavaScript htmlentities() / htmlspacialchars() и т. Д., Но что бы я ни пытался сделать, результат всегда одинаков.

Моя страница настроена на iso-8859-15, как и requestType для запроса.

Поскольку мне не приходилось слишком много использовать Ajax в моей работе, я снял процедуру установки из сети. Это выглядит так:

var page_request = false;
var contentType = "application/x-www-form-urlencoded;charset=iso-8859-15";  

if (window.XMLHttpRequest)
{
  page_request = new XMLHttpRequest();
}

// If the Browser is Internet Explorer
else if (window.ActiveXObject)
{
  try
  {
    page_request = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e)
  {
    try
    {
      page_request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e){}
  }
}
else 
{ 
  return false; 
}

page_request.open('POST', url, true);
page_request.setRequestHeader("Content-Type", contentType);
page_request.send(query);

Однако в файле PHP на принимающей стороне и в базе данных специальные символы преобразуются.

Любая помощь очень ценится! Я потратил большую часть этого дня, пытаясь исправить эту ошибку ...

Ответы [ 3 ]

1 голос
/ 02 апреля 2009

Ваша ошибка в кодировке. Утверждение о том, что контент находится в формате ISO, не делает его волшебным образом.

Ваша переменная query выглядит в кодировке UTF-8. Этого следовало ожидать, потому что строки Javascript всегда имеют Unicode и функции типа encodeURIComponent() (которые необходимы для правильного форматирования запросов GET и POST) используют UTF-8.

ИМХО, лучше всего полностью прекратить использование кодировок ISO.

Если вы пока не можете этого сделать, вам нужно самостоятельно сериализовать данные в Javascript или конвертировать UTF-8 в ISO при получении опубликованных данных на сервере.

0 голосов
/ 02 апреля 2009

вам нужно использовать encodeURIComponent для вашего textarea контента. и используйте UTF-8.

0 голосов
/ 02 апреля 2009

Прежде всего, этот сайт поддерживает подсветку синтаксиса, но только если вы выберете код и нажмете маленький символ 101 | 010.

Во-вторых, я бы порекомендовал ISO-8859-1, но я не говорю, что это гарантированно работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...