Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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用のライブラリが用意されているようです。

https://dev.twitter.com/docs/tco-url-wrapper/how-twitter-wrap-urls

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

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

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

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

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

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

それがこのライブラリ

ライセンスはApache License v2.0

https://github.com/nojimage/twitter-text-php

使い方

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を使ったアプリを作ってみようという方は、
一度ぜひ使ってみてください。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away