AJAX and Multibyte Character Support
|
URL:http://www.taylanpince.com/blog/AJAX-and-Multibyte-Character-Support.html
I love AJAX, and I realize that there are more than enough tutorials on the subject floating around the web these days (my favourite is still the one over at the Apple Developer Connection). But when I wanted to use a simple AJAX menu for a site I was developing in Turkish, I quickly realized that there are some issues about character encoding in dynamically loaded AJAX elements, and that there are no apparent solutions. The famous XMLHttpRequest object, when used to get the data directly through the responseText method, only supports UTF-8. Unfortunately, there are times when I am not able to define UTF-8 as my main encoding method and I needed a solution to be able to use the features of AJAX regardless of the language the site was in. One option was to use the responseXML method rather than the responseText, as I read somewhere that it was possible to change the encoding through the XML and make the browser understand the content wasn"t in UTF-8. That"s a good idea, but the problem is that parsing XML through JavaScript is still a huge issue, especially due to the different approaches taken by different browsers, and I didn"t want to get into that just to fix a seemingly simple(r) encoding problem. The first solution came to me when I started looking at PHP rather than JavaScript. I put a simple header() announcement at the beginning of the PHP file that was going to be loaded in a DIV element through AJAX, and redefined the encoding of the document.
header("Content-type: text/html; charset=ISO-8859-9");
I finally managed to create a compatible PHP code by letting go of my original encoding and embracing UTF-8. The solution was to use PHP"s Multibyte String capability in order to convert the original text into UTF-8.
header("Content-type: application/x-javascript; charset=UTF-8"); echo "<a href="index.php?action=load">".mb_convert_encoding("ü ü ? ? ? ? ? ?", "UTF-8", "ISO-8859-9")."</a>";
Of course, if you are going to use this conversion regularly, you might want to create your own PHP function for encoding conversion.
function encodeAJAX($str)a echo encodeAJAX("ü ü ? ? ? ? ? ?");
源代码网供稿. |
