URIError: malformed URI sequenceに出会った時の解決方法

エラー

get通信でURLからパラメータを取得しようとした際に、あるページから飛ぶと「URIError: malformed URI sequence」というエラーが起こっていました。

やりたかったこと

フロント側でURL内の文字列を取得し、必要箇所にその文字列を出力したかったです。

エラー原因

MDNを読んでいると、URIエラーが起きるのは、不正に利用された場合とのこと。

不正ってなんだ不正って!!と思っていたのですが、取得できていたデコード前のURIを変換サイトで変換してみると、デコードができませんでした!!

恐らく処理の途中で、文字列が崩れてしまったのではないかと考えます。

解決方法

至って簡単です。URIの取得時点でデコードしておくこと

私の場合は、「URI取得→処理→デコード」という順で行っていたところを、「URI取得→デコード→処理」という順に直したら上手く動くようになりました。今考えると、なぜ処理を実行する前にデコードしなかったのか…(゜-゜)

参考までにコードの抜粋も載せておきます。

...
// 記載方法はReact×Typescriptです。

let search_params: string = decodeURI(useLocation().search); // 取得時点でデコードしておく
const [ keyword, setKeyword ] = useState('');

useEffect(()=>{
   getKeywordFromURL();
},[])

const getKeywordFromURL = () => {
    if(search_params.match("&key=")){
       let index_key = search_params.indexOf("&key=") + 5;
       default_keyword = search_params.substr(index_key, search_params.length - index_key);
       setKeyword(default_keyword);
    }
 }

...
タイトルとURLをコピーしました