質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1009閲覧

【javascript】tweetでURLをシェアする機能を作りたいが、URLクエリパラメーターが表示されない

DKI

総合スコア11

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/04/13 11:10

編集2021/04/14 05:21

結論から説明すると、URLエンコードしたURLをツイートすると、ツイート時にデコードされ、URLが日本語表記され、指定したURLに飛べないというエラーです

javascript

1 tweet() { 2 const baseUrl = 'https://relay-composition.web.app/about'; 3 const wordURL = encodeURI(this.$route.query.word); 4 const idURL = encodeURI(this.$route.query.id); 5 const queryParam1 = "?word="+wordURL+"&id="+idURL; 6 const url = baseUrl+queryParam1; 7 var shareURL = 8 "https://twitter.com/intent/tweet?text=" + 9 "新しい小説を作ろう" + this.$route.query.word + "に" + this.newPost + "を投稿しました" + 10 "&url=" + url; 11 location.href = shareURL; 12 13 },

このようなツイートする関数を作成しました。
this.$route.query.wordにはルーティングされたページのテキストフォームに入力されたデータが、動的ルートマッチングによってqueryされています。
例:this.$route.query.word = "タイトル"
this.$route.query.id = "名前"

URL全体 = https://relay-composition.web.app/about?word=モーダル&id=れい

console.log(url)とすると、コンソール上には
https://relay-composition.web.app/about?word=%E3%83%A2%E3%83%BC%E3%83%80%E3%83%AB&id=%E3%82%8C%E3%81%84
このような正しいURLが表示されますが、いざツイートする画面までいくと、
https://relay-composition.web.app/about?word=モーダル

このようにqueryの$idの部分が消えてしまい、エンコードしているはずの文字列が日本語に戻ってしまい、リンクになりません。
イメージ説明

この状態を解決する方法が知りたいです。

最善はもちろんデータ構造を変えることなく、正しい挙動になれば良いのですが、どうしても無理であればqueryをparamsにする。
もしくは受け渡している文字列を英数字のみのものに設定し、現状受け渡しているデータはpropsかfirebaseから受け渡すことも考えています。

回答していただけると嬉しいです。
よろしくお願いいたします。

追記
ツイート画面のURL
https://twitter.com/intent/tweet?text=%E6%96%B0%E3%81%97%E3%81%84%E5%B0%8F%E8%AA%AC%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86%E3%83%A2%E3%83%BC%E3%83%80%E3%83%AB%E3%81%AB%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F&url=https://relay-composition.web.app/about?word=%E3%83%A2%E3%83%BC%E3%83%80%E3%83%AB&id=%E3%82%8C%E3%81%84

ここでは問題なく、&id以下が表示されているが、ツイート画面では表示されない、かつ%クエリパラメータが日本語になってしまっている。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

こちらどうやら&という単語がTwitterの仕様で使えないから、表示できていないようでした

投稿2021/04/17 14:45

DKI

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問