[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[kahua-dev:00748] 属性値文字列に '( アポストロフィ) が含まれている場合



属性値文字列に'(アポストロフィ)が含まれている場合、
kahua-web では属性値文字列が'の位置で終端されて解釈されてしまいます。

たとえば、[[/User's Manual]]というページを作ろうとすると、
User's Manual<a href='http:/localhost/cgi-bin/kahua.cgi/kahua-web/edit/User's%20Manual'>?</a> 
のようなリンクができてしまい、href の属性が 
「http://localhost/cgi-bin/kahua.cgi/kahua-web/edit/User's%20Manual」ではなく
「http://localhost/cgi-bin/kahua.cgi/kahua-web/edit/User」と解釈されています。;

このようなことが起こるのは、sxml.tools モジュールで定義されている
sxml:attr->xml が属性値を常に'(シングルクウォート=アポストロフィ)で
囲みますが、uri-encode(-string)が ' をエスケープしないことに起因します。

対処法は以下のようなものが考えました。

(1) sxml:attr->xml を書き換えて、属性値文字列の中に ' が含まれている場合
    "(ダブルクウォート)で属性値を囲むようにする。
(2) sxml:attr->xml を使わず、自前の sxml:attr->xml 相当を(1)のように定義して
    それを使う。
(3) uri-encode(-string) を拡張して、:escape キーワード引数で、' などの
    unreserved 文字をエスケープできるようにして、それを使う。
(4) uri-encode(-string) を使わず、自前の uri-encode(-string)相当を(3)のように
    定義してそれを使う。

結局、(2)を選択しました。

--nobsun