2006-04-02

JavaScriptのencodeの復元方法

自分用メモ。

XMLHttpRequestを使う時は、やっぱり原則utf-8ということで、2バイト圏の我々としてはいろいろ苦労があるわけですが、みんなが結構困ってるのがJavaScriptのescapeで変換される文字列。ブラウザによって挙動が違うので大変です。で、このescapeを復元してくれる関数を作ってくださった方があるそうです。
ありがたやありがたや。

/**
* Function converts an Javascript escaped string back into a string with specified charset (default is UTF-8).
* Modified function from http://pure-essence.net/stuff/code/utf8RawUrlDecode.phps
*
* @param string $source escaped with Javascript's escape() function
* @param string $iconv_to destination character set will be used as second paramether in the iconv function. Default is UTF-8.
* @return string
*/
function unescape($source, $iconv_to = 'UTF-8') {
$decodedStr = '';
$pos = 0;
$len = strlen ($source);
while ($pos < $len) {
$charAt = substr ($source, $pos, 1);
if ($charAt == '%') {
$pos++;
$charAt = substr ($source, $pos, 1);
if ($charAt == 'u') {
// we got a unicode character
$pos++;
$unicodeHexVal = substr ($source, $pos, 4);
$unicode = hexdec ($unicodeHexVal);
$decodedStr .= code2utf($unicode);
$pos += 4;
}
else {
// we have an escaped ascii character
$hexVal = substr ($source, $pos, 2);
$decodedStr .= chr (hexdec ($hexVal));
$pos += 2;
}
}
else {
$decodedStr .= $charAt;
$pos++;
}
}

if ($iconv_to != "UTF-8") {
$decodedStr = iconv("UTF-8", $iconv_to, $decodedStr);
}

return $decodedStr;
}

以下参照:

unescape(PHP)関数 Javascript版escape日本語POST対応 PEAR::HTML_AJAX - PHP::PEAR - dozo PukiWiki: "XMLHttpRequest"

Hawk's W3 Laboratory : XML : XMLHttpRequestについて
http://www.hawk.34sp.com/stdpls/xml/xmlhttprequest.html
コメントを投稿