はじめに
▼ 現象
▼ 理想
原因
原因は &
を %26
にエンコードしなかったからです。Twitter のシェアリンクにおいて、text
パラメータに &
が挿入されていると、別パラメータと認識されてしまいます。
https://twitter.com/intent/tweet?text=${title}&url=${url}&hashtags=${hashtag1}, ${hashtag2}...
そのため、 &
の直前である Vue.js
で途切れてしまい、それ以降の文字はツイート画面に表示されませんでした。
結論
解決策は JavaScript の標準組み込みオブジェクトである encodeURIComponent
関数を使うだけです。引数に値を渡すと、UTF8 ベースでエンコードされた値が返ってきます。
https://twitter.com/intent/tweet?text=${encodeURIComponent(title)}
&
だけでなく、?
, /
, #
など URI で意味をもつ特定の文字もエンコードされます。
基本的に SNS のシェアリンクに対し、各パラメータに値を渡す時は encodeURIComponent
関数でエンコードすると良さそうです!
最後に
今回は encodeURIComponent
関数を用いて、エンコードする方法を紹介しました。わざわざ自前でエンコードするための関数を用意しなくて良いのは嬉しいですね!
株式会社キカガク コンテンツマーケティング責任者
入田 / ぐるたか
twitter:
@guru_taka
参考文献