JavaScript のメモ。
JavaScript でデータを取得し、PHPに送ってSQLで記録する…というプログラムを作っていました。で、プログラムの都合上、どうしてもJavaScriptでURLエンコードをする必要がありました。
JavaScript には escape() というエンコードを行う関数がありますが、実行してもIEでは通常のURLエンコードを行わないうえにNNでも不完全なURLエンコードを行うため、使用しないことが推奨されています。encodeURI() なんていう関数もあるようですが、動作するブラウザは少ないようです。
何とかサーバーサイドで処理できないかと色々試したけど、処理の都合上難しい。
うわ、どうしよう。と焦ったけど、あちこち調べた結果、以下のプログラムでURLエンコードができました。
ただ、文字コードはUTF-8になるので、サーバー側で適切な処理をする必要があります。
//URL Encode (UTF-8)
function encodeURL(str) {
var character = '';
var unicode = '';
var string = '';
var i = 0;
for (i = 0; i < str.length; i++) {
character = str.charAt(i);
unicode = str.charCodeAt(i);
if (character == ' ') {
string += '+';
} else {
if (unicode == 0x2a || unicode == 0x2d || unicode == 0x2e || unicode == 0x5f || ((unicode >= 0x30) && (unicode <= 0x39)) || ((unicode >= 0x41) && (unicode <= 0x5a)) || ((unicode >= 0x61) && (unicode <= 0x7a))) {
string = string + character;
} else {
if ((unicode >= 0x0) && (unicode <= 0x7f)) {
character = '0' + unicode.toString(16);
string += '%' + character.substr(character.length - 2);
} else if (unicode > 0x1fffff) {
string += '%' + (oxf0 + ((unicode & 0x1c0000) >> 18)).toString(16);
string += '%' + (0x80 + ((unicode & 0x3f000) >> 12)).toString(16);
string += '%' + (0x80 + ((unicode & 0xfc0) >> 6)).toString(16);
string += '%' + (0x80 + (unicode & 0x3f)).toString(16);
} else if (unicode > 0x7ff) {
string += '%' + (0xe0 + ((unicode & 0xf000) >> 12)).toString(16);
string += '%' + (0x80 + ((unicode & 0xfc0) >> 6)).toString(16);
string += '%' + (0x80 + (unicode & 0x3f)).toString(16);
} else {
string += '%' + (0xc0 + ((unicode & 0x7c0) >> 6)).toString(16);
string += '%' + (0x80 + (unicode & 0x3f)).toString(16);
}
}
}
}
return string;
}実際にURLエンコードを行うときは
text = encodeURL(text);とします。
うーん、もっと簡単にできる方法があるのだと思っていたけど…。
文字コードなんてキライだー。(T T)
me 2007年12月25日(火)13時22分 編集・削除
検索したらこちらがヒットしました。コードありがたく使わせていただきます。
ところで、22行目に'ox0f'とありますが、'0x0f'の間違いですよね?
実際コードを読んで確認したのではなく、ふと目に付いただけなんですけど。