URL クエリパラメータの値が日本語で Safari だけ挙動がおかしいときの対処法
URL クエリパラメータの値が日本語で、その日本語の値を JavaScript で処理する際に、Safari と Safari 以外のブラウザとで挙動が異なりしばらくハマりました。今回は、そのとき取った対処法を共有します。
原因は、Unicode の正規化形式の違いでした。
UTF-8 にはさらに細かい種類があって、一般的に UTF-8 というと NFC でエンコードされたものを指すことが多いです。一方 macOS や iOS では、NFD でエンコードされたもの(UTF-8-MAC)を指します。
私が直面した問題は、ある JavaScript のプログラムを macOS ないしは iOS で実行したときに、クエリパラメータの値(日本語)が、Safari 以外では NFD で正規化されてパーセントエンコーディングされ、Safari の場合は NFC で正規化されてパーセントエンコーディングされてしまうというものでした。
Chrome や Firefox では全く再現しません。Safari では頻度こそ高いものの毎回ではないので、どのような条件で起こるのか完全な特定まではできていませんが、URL を直打ちしたときに最も再現率が高かったように思います。
以上のことから、以下のように対処して解決しました。
let userAgent = window.navigator.userAgent;
if (userAgent.indexOf('Safari') != -1) {
str = str.normalize('NFD');
}
Author And Source
この問題について(URL クエリパラメータの値が日本語で Safari だけ挙動がおかしいときの対処法), 我々は、より多くの情報をここで見つけました https://qiita.com/lyd7th/items/54e22731ea7705cc3d63著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .