fix: `/share` with unicode characters in the URL (#13846)
* fix: `/share` with unicode characters in the URL * docs(changelog): `/share` で日本語等を含むurlがurlエンコードされない問題を修正
This commit is contained in:
parent
5836bd85df
commit
367bf0c8fc
|
@ -60,6 +60,7 @@
|
||||||
- Fix: リバーシの対局を正しく共有できないことがある問題を修正
|
- Fix: リバーシの対局を正しく共有できないことがある問題を修正
|
||||||
- Fix: 通知をグループ化している際に、人数が正常に表示されないことがある問題を修正
|
- Fix: 通知をグループ化している際に、人数が正常に表示されないことがある問題を修正
|
||||||
- Fix: 連合なしの状態の読み書きができない問題を修正
|
- Fix: 連合なしの状態の読み書きができない問題を修正
|
||||||
|
- Fix: `/share` で日本語等を含むurlがurlエンコードされない問題を修正
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
- Enhance: エンドポイント`antennas/update`の必須項目を`antennaId`のみに
|
- Enhance: エンドポイント`antennas/update`の必須項目を`antennaId`のみに
|
||||||
|
|
|
@ -64,7 +64,34 @@ async function init() {
|
||||||
// Googleニュース対策
|
// Googleニュース対策
|
||||||
if (text?.startsWith(`${title.value}.\n`)) noteText += text.replace(`${title.value}.\n`, '');
|
if (text?.startsWith(`${title.value}.\n`)) noteText += text.replace(`${title.value}.\n`, '');
|
||||||
else if (text && title.value !== text) noteText += `${text}\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();
|
initialText.value = noteText.trim();
|
||||||
|
|
||||||
if (visibility.value === 'specified') {
|
if (visibility.value === 'specified') {
|
||||||
|
|
Loading…
Reference in New Issue