LoginSignup
20
20

More than 5 years have passed since last update.

Twitterの文字列を正確にカウントする方法

Last updated at Posted at 2014-05-16

val().lengthでは正確にはカウントできない

Twitterの投稿には140文字までの制限があります。

よくTwitterのAPIを利用した投稿アプリで文字数のカウント機能を
実装することがあると思いますが、単純に

$('#twt').val().length()

のようにカウントすると、おかしくなるときがあります

Twitterでは、URLは必ず短縮される

まず、Twitterでは投稿中のURLは全てTwitter独自の短縮URLの仕組みであるt.coで短縮されるため
URLの長さに限らず文字数は、

http: 23文字
https: 22文字

と決まっている。

以下のような文章は、

ヤフー http://yahoo.co.jp

普通にカウントすれば、22文字だがTwitterだと29文字になる。

一部文字のカウント数も異なる

これは検証したのが、かなり前なので詳しくは覚えていないのですが、

一部の特殊な文字(サロゲートペア)に対する扱いも、

val().length と Twitterの文字数カウントの方法は違うらしい
(詳しい人いたら教えていただけるとありがたいです)

公式のライブラリを探す

そこで、Twitterの文字数カウントと同じ方法で計算するためのライブラリがあるか探したらありました。

PHP,Java,Ruby,Python,JS用のライブラリが用意されているようです。

ただ自分が普段利用しているPHPのためのライブラリは、

短縮URLを展開するものであったり投稿からハッシュタグのみ抽出するものであったりして、

直接文字数をカウントする関数というものが無いです。

フォーク先のライブラリを使う

そこで根気よく探したら、

日本人の方がフォークして使いやすい関数を実装してくれていました

それがこのライブラリ

ライセンスはApache License v2.0

使い方

Twitter_Validation.phpをインポートする

include_once('Twitter_Validation.php');

インスタンスを作成

$validator = Twitter_Validation::create('', array(
    'short_url_length' => 22,
    'short_url_length_https' => 23,
));

getTweetLengthを呼び出す

$twitter_count = $validator->getTweetLength($message);

これだけ。

TwitterのAPIを使ったアプリを作ってみようという方は、
一度ぜひ使ってみてください。

20
20
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20