xmlHttpRequest отображает знак евро как вопросительный знак - PullRequest
0 голосов
/ 10 ноября 2011

Я использую этот скрипт (из dynamicdrive) для динамического заполнения div с id:

    var bustcachevar=1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
    var loadedobjects=""
    var rootdomain="http://"+window.location.hostname
    var bustcacheparameter=""

    function ajaxpage(url, containerid){
        var page_request = false
        if (window.XMLHttpRequest) // if Mozilla, Safari etc
        page_request = new XMLHttpRequest();
        else if (window.ActiveXObject){ // if IE
            try {
                page_request = new ActiveXObject("Msxml2.XMLHTTP");
                }
            catch (e){
                try{
                    page_request = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                catch (e){}
            }
        }
        else
        return false
        page_request.onreadystatechange=function(){
            loadpage(page_request, containerid)
        }

        if (bustcachevar) //if bust caching of external page
        bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
        page_request.open('GET', url+bustcacheparameter, true)
        page_request.send(null)
    }

    function loadpage(page_request, containerid){
        if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
        document.getElementById(containerid).innerHTML=page_request.responseText
    }

Все работает нормально, пока я не загружу страницу, например, со знаком евро. Кодовые страницы правильно установлены на странице, но на ней отображается вопросительный знак. Я не знаю достаточно JavaScript, чтобы решить эту проблему.

Заранее спасибо за любые советы!

ПРИМЕЧАНИЕ: Благодаря другу, теперь я знаю, что сохранение файла, который вы хотите загрузить с помощью этого скрипта в UTF-8, решает проблему. Но я не могу быть уверен, что каждая загружаемая страница имеет кодировку UTF-8, поэтому мой вопрос:

есть ли способ для скрипта установить правильную кодировку? Есть ли способ позволить скрипту адаптироваться к кодовой странице файла, который вы хотите загрузить?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2011

Это моя гипотеза (и я думаю, что она была подтверждена вашими обновлениями):

  • Когда вы пишете загружаемый удаленный документ, вы просто открываете свой редактор, нажимаете символ € на клавиатуре и сохраняете. Поскольку вы никогда не выбирали какую-либо кодировку, ваш редактор использовал кодовую страницу ANSI. И вот в чем проблема: кодовая страница ANSI в основном зависит от того, где вы живете. В Западной Европе Win-1252 является популярным выбором и кодирует символ евро как 0x80.

  • Когда вы пишете целевой HTML-документ, в который вы хотите вставить его, вы делаете то же самое и получаете документ Win-1252. Однако веб-сервер не знает, что такое кодировка. Много раз, по умолчанию это будет что-то вроде ISO-8859-1 , и случается, что ISO-8859-1 даже не имеет символа евро!

  • JavaScript читает 0x80 и пишет 0x80.

  • Браузер находит 0x80 в HTML-документе, предположительно ISO-8859-1. В таком кодировании 0x80 фактически пусто.

Так что вам не нужно исправлять свой код JavaScript (там ничего нет, главным образом потому, что там нет ничего плохого). Вам необходимо выяснить, какова кодировка вашего сайта, и сгенерировать файлы, которые фактически используют такую ​​кодировку (расширенные редакторы позволят вам выбрать).

0 голосов
/ 10 ноября 2011

Кажется, у вас где-то есть проблема с кодировкой.

Я настоятельно рекомендую вам использовать UTF-8 везде, так как это установленный стандарт для Интернета.Убедитесь, что страница, выполняющая вызов ajax, и динамически загружаемая страница закодированы в UTF-8 и отправлены сервером с правильными заголовками (заголовки должны содержать что-то вроде Content-type: text/html; charset=UTF-8).

Также это лучшийЧтобы избежать подобных проблем, попробуйте заменить экзотические символы их HTML-кодом firendly на HTML-страницах.Используйте € для €.

...