diff options
| author | anatawa12 <anatawa12@icloud.com> | 2024-05-20 23:21:11 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-20 23:21:11 +0900 |
| commit | 367bf0c8fcd96ff56ce1016e52fcb4751331440a (patch) | |
| tree | 57b8d324196dea3911e95c56e5829c5ed8b1cc1b | |
| parent | fix: 複数idを指定する`users/show`が関係ないユーザを返すこ... (diff) | |
| download | sharkey-367bf0c8fcd96ff56ce1016e52fcb4751331440a.tar.gz sharkey-367bf0c8fcd96ff56ce1016e52fcb4751331440a.tar.bz2 sharkey-367bf0c8fcd96ff56ce1016e52fcb4751331440a.zip | |
fix: `/share` with unicode characters in the URL (#13846)
* fix: `/share` with unicode characters in the URL
* docs(changelog): `/share` で日本語等を含むurlがurlエンコードされない問題を修正
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | packages/frontend/src/pages/share.vue | 29 |
2 files changed, 29 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index a9944d4b5e..8d1b0a010a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,6 +60,7 @@ - Fix: リバーシの対局を正しく共有できないことがある問題を修正 - Fix: 通知をグループ化している際に、人数が正常に表示されないことがある問題を修正 - Fix: 連合なしの状態の読み書きができない問題を修正 +- Fix: `/share` で日本語等を含むurlがurlエンコードされない問題を修正 ### Server - Enhance: エンドポイント`antennas/update`の必須項目を`antennaId`のみに diff --git a/packages/frontend/src/pages/share.vue b/packages/frontend/src/pages/share.vue index 680934e7ce..37f6558d64 100644 --- a/packages/frontend/src/pages/share.vue +++ b/packages/frontend/src/pages/share.vue @@ -64,7 +64,34 @@ async function init() { // Googleニュース対策 if (text?.startsWith(`${title.value}.\n`)) noteText += text.replace(`${title.value}.\n`, ''); else if (text && title.value !== text) noteText += `${text}\n`; - if (url) noteText += `${url}`; + if (url) { + try { + // Normalize the URL to URL-encoded and puny-coded from with the URL constructor. + // + // It's common to use unicode characters in the URL for better visibility of URL + // like: https://ja.wikipedia.org/wiki/ミスキー + // or like: https://藍.moe/ + // However, in the MFM, the unicode characters must be URL-encoded to be parsed as `url` node + // like: https://ja.wikipedia.org/wiki/%E3%83%9F%E3%82%B9%E3%82%AD%E3%83%BC + // or like: https://xn--931a.moe/ + // Therefore, we need to normalize the URL to URL-encoded form. + // + // The URL constructor will parse the URL and normalize unicode characters + // in the host to punycode and in the path component to URL-encoded form. + // (see url.spec.whatwg.org) + // + // In addition, the current MFM renderer decodes the URL-encoded path and / punycode encoded host name so + // this normalization doesn't make the visible URL ugly. + // (see MkUrl.vue) + + noteText += new URL(url).href; + } catch { + // fallback to original URL if the URL is invalid. + // note that this is extremely rare since the `url` parameter is designed to share a URL and + // the URL constructor will throw TypeError only if failure, which means the URL is not valid. + noteText += url; + } + } initialText.value = noteText.trim(); if (visibility.value === 'specified') { |