駄メモ



2005年12月02日

メモメモ

Firefox1.5の話。多分1.0.xでも同じ。

a要素のhref属性に使用できない文字が入っていた場合、hrefプロパティにはエスケープされた文字列が入る。どの文字コードによってエスケープされるかは状況によって異なる。例えば、

<p>
<a href="こんにちわ">こんにちわ</a>
</p>

とあった場合、

var ancs = document.getElementsByTagName( "a" );
dump( ancs[0].getAttritbute( "href" ) );
 こんにちわ
 
dump( ancs[0].href );
 file://%82%B1%82%F1%82%C9%82%BF%82%ED

と、HTML文書の文字コード(この場合Shift-JIS)でエスケープされているが、

<p>
<a href="mailto:こんにちわ">こんにちわ</a>
</p>

とすると、

var ancs = document.getElementsByTagName( "a" );
dump( ancs[0].getAttritbute( "href" ) );
 mailto:こんにちわ
 
dump( ancs[0].href );
 mailto:%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%82%8F

のように、UTF-8でエスケープされた文字列が入っている。またどちらの場合でも、親要素のinnerHTMLプロパティを見てみると、

var pars = document.getElementsByTagName( "p" );
dump( pars[0].innerHTML );
 <a href="%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%82%8F">こんにちわ</a>

というように、href属性にはUTF-8でエスケープされた文字列が入っている。javascriptで動的なページを作る際、DOMに則って作るのではなくinnerHTML書き換えを用いる場合は注意が必要。