URIのなかに生で書いてもいい記号文字ってなんだっけ? わからんわ。
次のようなJavaScript断片を実行してみました。
var s = "";
for (var i = 32; i <= 126; i++) {
var c = String.fromCharCode(i);
if (!c.match(/[a-zA-Z0-9]/)){
// 英数字以外
s += c;
}
}
var t = encodeURIComponent(s);
t = t.replace(/%[0-9a-f][0-9a-f]/g, "");
var r = s + "\n" + t
変数rを表示してみると:
- 元の記号達:「 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~」
- 無変換記号:「!'()*-._~」
ふーん、「!'()*-._~」が安全な記号か。
encodeURIでやってみると:
- 元の記号達:「 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~」
- 無変換記号:「!#$&'()*+,-./:;=?@_~」
あー、なるほど。「/:@#?」はURI内で特別な意味で使いますね。「=&+」もクエリ・ストリング内では特殊。「$,;」も予約されているようですが、用途知らん。RFC? いま読む気ない。
[追記]ヤバい記号は「 "<>[\]^`{|}」(最初は空白)ってことね。[/追記]