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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Twitter

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Q&A

解決済

1回答

1628閲覧

Twitterのシェアボタンに渡すテキストに特殊な文字が含まれていると動作しない

peanuts

総合スコア34

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Twitter

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

0グッド

0クリップ

投稿2018/03/29 12:29

ご覧いただきありがとうございます。

現在、JavaScriptによるシェアボタンを実装したいと思っています。
公式のリファレンスは、以下になります。
Tweet Button — Twitter Developers

Tweet Buttonの中でも Web Intent と呼ばれる種類の形式でシェア(ツイート)ボタンを実装したいと考えています。

また、textの内容はRailsから出力した内容で、以下のようなコードになっています。

ビュー

rb

1=link_to twitter_share_url(@name), class: 'btn', target: '_blank' do 2 %i.fa.fa-twitter 3 あなたのタイムラインへシェアする

ヘルパーメソッド

rb

1def twitter_share_url(name) 2 "https://twitter.com/intent/tweet?text=#{name}さんは・・・(省略)・・・です。" 3end

正常にTwitterでのシェアウィンドウが開かれる場合

@user = "太郎"のケースです。

html

1<a class="btn" target="_blank" href="https://twitter.com/intent/tweet?text=太郎さんは・・・(省略)・・・です。"> 2 <i class="fa fa-twitter left"></i> 3 あなたのタイムラインへシェアする 4</a>

そして以下が、このリンクから遷移した結果です、

URL: https://twitter.com/intent/tweet?text=太郎さんは・・・(省略)・・・です。

イメージ説明

動作しないパターン

ユーザー名(@name)に特殊な文字列が含まれていると、うまくTwitterのシェアウィンドウが開きません。


@user = "太郎|きびだんごチーム"のケースです。|という文字列が、含まれています。

html

1<a class="btn" target="_blank" href="https://twitter.com/intent/tweet?text=太郎 | きびだんごチームは・・・(省略)・・・です。"> 2 <i class="fa fa-twitter left"></i> 3 あなたのタイムラインへシェアする 4</a>

そして、以下が、リンクを踏んだ際のURLです。

URL: https://twitter.com/intent/tweet?text=太郎%20|%20きびだんごチームは・・・(省略)・・・です。

遷移後は、真っ白の状態で何も開かれない。

考えていること

恐らく、|が特殊な文字列であり、URLに含める場合はサーバーサイド側かJavaScriptで何らかのエスケープ処理が必要となる中、そういった処理を噛ませられていないため、Twitterシェアボタンが正常に動作していないのだと思います。

しかし、自分の方で色々とエスケープ周りを試行錯誤していますが、未だに正常な動作が実現できていません。

何かアドバイスを頂けますと幸いです。

よろしくお願いいたします。

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

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

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

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

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

defghi1977

2018/03/29 12:33

URLエンコードをRubyで行うかJavaScriptで行うか
peanuts

2018/03/29 15:00

URLエンコード周りが鍵というヒントをありがとうございます。サーバーサイドで完了できればと思っており、現在、Ruby側で試行錯誤しています。
guest

回答1

0

自己解決

@defghi1977さん、ヒントを頂きありがとうございました。

以下のようにインテントのURLのtextのクエリー部分をURLエンコードしてあげることで、解決できました。

rb

1def twitter_share_url(name) 2 "https://twitter.com/intent/tweet?text=#{escape_text(name)}" 3end 4 5private 6 7def escape_text(name) 8 CGI.escape(name + "は・・・(省略)・・・です。") 9end

また、今回のデバッグ経験で、URLエンコードについておさらいすることができました。
以下の記事は初歩から理解でき、おすすめです。

URLエンコードについておさらいしてみた - Qiita

ありがとうございました。

投稿2018/03/30 06:38

peanuts

総合スコア34

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問