AJAX og Æ,Ø,Å.

May 5, 2007

I den tid jeg har arbejdet hos Reklamebureauet ReFocus A/S, har min interesse for AJAX for alvor taget til. Med en god blanding af prototype og Script.aculo.us og andre visuelle scripts, har vi mulighed for at lave hjemmesider, der ligner og fungerer mere og mere som "almindelige" dekstop applikationer - Men der er et catch eller flere!

Et af de første problemer jeg hørte om, var problemet med browsers back-buttons, hvilket der heldigvis findes en løsning på - og lad os ikke glemme, at dette faktisk kun finder sted, når vi bruger AJAX til navigation, eller fjerner/opdaterer et element, så det gamle indhold forsvinder.

Alex Bosworth har skrevet et par artikler om diverse problemer, som folk enten overser eller ikke kender til - Meget interessant og relevant læsning, for folk der vil igang, eller er igang med AJAX.

AJAX og Æ,Ø,Å

I de to nævnte artikler ovenfor, kan du læse meget mere om diverse små problemer. Jeg har i mellemtiden fundet mit eget problem - og det er der nu mange der har, hvis man googler det lidt. Problemet er Æ, Ø, Å og muligvis også andre specielteng i forbindelse med request i AJAX.

I resten af denne post vil jeg tage udgangspunkt i at lave et request med prototypes AJAX objekt.

Men prototype, kan vi lave et AJAX-request på følgende måde:

var url = some-file.php;

var pars = action=MyActionQuery;

new Ajax.Request(url,{method:post, postBody:pars});

Vi kan også definerer en eventhandler funktion til at hånterer requestet. Dette gøres med Prototype, ved at definerer funktionen, og tilføje denne til onSucess-propertien, således:
var mySuccess = funktion(request) {

//gør noget med responset fra requestet

alert(request.responseText);

}

new Ajax.Request(url, {method:post, postBody:pars, onSuccess: mySucess});

Problemet er nu, at hvis det respons vi modtager, indeholder Æ, Ø eller Å, vil disse tegn komme til at se rimelig underlige ud, hvis du bruger det dansk tegnsæt ISO-8859-1. Grunden til dette er, at request-metoden (som sendes som XML) som standard benytter UTF-8!

Løsningen kan findes ganske simpelt ved at sætte det korrekte charset i den action fil du benytter (some-file.php i ovenstående).

Jeg har kun prøvet dette af i PHP, men her kan det lade sig gøre, hvis du i starten af filen indsætter følgende:

header(Content-Type: text/html; charset=ISO-8859-1);
Herefter kan du bruge Æ, Ø og Å lige så tosset du vil, og de vil blive vist om forventet gennem dit AJAX request.

Skal du bare sende en enkelt streng, kan du nøjes med at benytte PHPs UTF8 dekoder: string : utf8_decode(string). Du kan læse mere om korrekt brug af tegnsæt her.

Comments

comments powered by Disqus