「輪郭に空白名があると検索→新規作成の際にASCII加算符に置き換えられてしまう」という不具合報告について,ようやく尻尾が掴めた気がしたので再調査に入る。
結局,decodeURIComponent() が + を半角スペースに置換しないというよく知られた落とし穴のせいだった。
decodeURIComponent() に渡す前に置換処理をしておくというのが定石らしいので @URI.dcd() を修正。
+ と半角スペースという時点で URI 符号化絡みの問題なのは明らかだったが,最初の調査では交度に論理的な問題が見つからず,再現性も明確ではなかった。
当然,全知検索窓に直接入力すれば問題なく,Firefox ではアドレスバーの URI を直接編集して半角スペースを含んだ検索をしても問題なかった。問題は,アドレスバーに直接検索語を入力した場合で,この場合は %20 ではなく + に半角スペースが置換され,これが JavaScript 側ではそのまま通っていた。
更に問題をややこしくしていたのは,捌き手では問題なく + を半角スペースに復号していたため,そのような検索をすると表示上も描出も問題なく行われるが JS で制御している描出後の転送先のみ + が残った検索になっていたことだった。
さっき何となく半角スペースを含んだ検索語から描出したことで再現し,交度を見直してもやはり問題が分からず,まさかと思って decodeURIComponent() の仕様を確認したところで原因が判明した。
今後のためにもなる勉強になって良かった。