Jak zrobić poprawne kodowanie w ajaxpage?


(arlid) #1

Witajcie. jak w tym skrypcie (http://www.dynamicdrive.com/dynamicindex17/ajaxcontent.htm) zrobić poprawne kodowanie stron, które mają się wyświetlać. Próbowałem zmieniać kodowanie w tychże stronach oraz na stronie głównej. Nie wiem gdzie to zmienić. Ponadto da się wybrać stronę załadowaną od razu na starcie? Może ktoś z was zna się lepiej na tym Ajaxie i może pomóc. Z góry dzięki.


(inż. Piniol) #2

AJAX zawsze zwróci Ci treść zakodowaną w UTF-8, więc jeżeli masz inne kodowanie no to masz problem :wink: Jeżeli korzystasz z PHP no to mogę zaprponować takie rozwiązanie dla strony w ISO-8859-2:

Po stronie PHP:

<?php

function AjaxISO($AStr)

  {

       $ARRPLISO = array('%B1','%E6','%EA',

'%B3','%F1','%F3','%B6','%BC','%BF','%A1','%C6',

'%CA','%A3','%D1','%D3','%A6','%AC','%AF');

       $ARRPLUTF16JS = array("%u0105","%u0107","%u0119",

"%u0142","%u0144","%u00F3","%u015B","%u017A","%u017C",

"%u0104","%u0106","%u0118","%u0141","%u0143","%u00D3",

"%u015A","%u0179","%u017B");


       $AStr = urlencode($AStr);

       $AStr = str_replace($ARRPLISO, $ARRPLUTF16JS, $AStr);

       return $AStr;

  }

?>

Zwracane teksty puszczamy przez powyższą funkcję. Po stronie JS:

function AjaxISO(tekst)

{

tekst = unescape(tekst);

return tekst.replace(/\+/g, " ");

}


...


var tmp_req = AjaxISO(page_request.responseText);

Sprawdzone pod: IE 6/7, Firefox 2/3, Opera.


(arlid) #3

Kodowanie strony to także UTF-8, więc własnie nie wiem czemu tak jest. Strona jest w HTML, więc mógłbyś napisać coś więcej o kodzie JS? Wstiawiam normalnie do dokumentu (?):

Chyba, ze jest inne rozwiązanie skoro kodowanie dokumentu to UTF-8.


(mario@) #4

Przy odczycie poprzez ajax'a u mnie wystarczyło dodać na stronie wczytywanej

header("Content-Type: text/html; charset=iso-8859-2");

(arlid) #5

Nie rozumiem za bardzo takiego zapisu. Gdzie dokładnie i jak to wpisać bo chyba coś źle robię.


(mario@) #6

Zakładam że masz jakiś serwer z obsługą php i na nim odpalasz to demko.

Przykładowo masz w demie stronkę external2.htm zamieniasz rozszerzenie na *.php i odpowiedni wpis w index.html

<a href="javascript:ajaxpage('ajaxfiles/external2.php', 'rightcolumn');">Ferrari Pagea> [/code]

Następnie zamień całą treść w pliku external2.php na coś takiego

[code]ąśćęółćźżśęą
W przeglądarce będziesz mieć dziwne znaczki (czasami trzeba wyczyścić cache aby zobaczyć efekt), następnie dopisz na górze pliku

<?php
header("Content-Type: text/html; charset=iso-8859-2");
?>
[/code]


czyli całość powinna wyglądać następująco

[code=php]<?php header("Content-Type: text/html; charset=iso-8859-2");?>ąśćęółćźżśęą

i powinieneś zobaczyć polskie literki, natomiast do zapisu poprzez ajax należy użyć odpowiedniej funkcji.