���٤ϡ�JavaScript�ǡ�

�ǥ�

�ʲ��Υե�����ɤ�����Ѵ��Ǥ���褦�ˤʤäƤ��ޤ���

����encodeURIComponent()���Ƥ��ޤ��Ǥȡ������ܸ�URL�Ѵ��ġ��� �� �ԥ�˥�����(Punycode)��UTF-8�ʤɤΥ��󥳡��ɤ��פΤ褦�ˡ�URI��ASCII���פ��������Ǥ�ξ������ޤ���

Decoded:
Encoded:
Ascii-fied:

�ƥ����ѤΥ��

������

��Punycode�Ѵ��Υ����ɤ�񤤤Ƥߤޤ��� - Opera����˺Ͽ�Τڤ��� - �����ಶ���פ�punycode.js��Ȥ碌�Ƥ��������ޤ������������Ǥ��ʤꥷ��ץ�Ǥ���

�ǡ�punycode.js�˥ޥ��ʡ��Х��򸫤Ĥ����ΤǤ���𡣱ѿ���������ʸ����������ȡ�����;�פ�-���դ��ޤ�����entry��script�ؤαƶ��Ϥ���ޤ���punycode�������פʾ��Ϥ��äȤФ��褦�ˤʤäƤ���Τǡ�

var re_fullstop = new RegExp(
    '[\u002E\u0589\u06D4\u0701\u0702\u1362\u166E\u1803'
  + '\u1809\u2CF9\u2CFE\u3002\uFE12\uFE52\uFF0E\uFF61]'
);

decodeIDN = function(str){
    return str.replace(/xn--([0-9a-z\-]+)/g, function(m0, m1){
        return Punycode.decode(m1);
    });
};

encodeIDN = function(str){
    var words = str.toLowerCase().split(re_fullstop);
    for (var i = 0, l = words.length; i < l; i++){
        if (! words[i].match(/[^0-9a-z\-]/)) continue;
        words[i] = 'xn--' + Punycode.encode(words[i]);
    }
    return words.join('.');
};

decodeURIComponentIDN = function(uri){
    return decodeURIComponent(uri).replace(/\:\/\/([^\/]+)/, function(m0,m1){
        return '://' + decodeIDN(m1);
    });

};

encodeURIComponentIDN = function(str){
    return encodeURIComponent(str.replace(/\:\/\/([^\/]+)/, function(m0,m1){
        return '://' + encodeIDN(m1);
    }));
};

unicodeToURI = function(str){
    return str.replace(/\:\/\/([^\/]+)/, function(m0,m1){
        return '://' + encodeIDN(m1);
    }).replace(/[^A-Za-z0-9_\;\/\?\:\@\&\=\+\$\,\[\]\-_\.\!\~\*\(\)]+/g,
        function(m0){
            return encodeURIComponent(m0);
    });
};

Enjoy!

Dan the Man with too Many Encodings to Support