在Javascript中为推文计算字符数的最佳方法

Pee*_*Haa 16 javascript twitter

来自Twitter API文档(http://dev.twitter.com/pages/counting_characters):

140个字符的tweet限制并不真正计算字符数,而是字符串的字节数.

如何使用Javascript计算字符串中的字节数,或者我的字符串中的每个字符总是使用2个字节,因为我将页面的编码设置为UTF-8?

也许已经有一个很好的计数器功能供我使用?

mol*_*v00 21

实际上,由于t.co url shortener,只计算字符不再起作用.查看这两个Twitter引用,了解如何处理缩短的链接:

https://support.twitter.com/articles/78124-how-to-shorten-links-urls

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

如果你在客户端寻求帮助,你将不得不用twitter-text.js建立一个新朋友

https://github.com/twitter/twitter-text-js

我还发布了一个函数的演练,我用它来计算推文中的剩余字符

http://blog.pay4tweet.com/2012/04/27/twitter-lifts-140-character-limit/

该功能看起来像这样

function charactersleft(tweet) {
    var url, i, lenUrlArr;
    var virtualTweet = tweet;
    var filler = "01234567890123456789";
    var extractedUrls = twttr.txt.extractUrlsWithIndices(tweet);
    var remaining = 140;
    lenUrlArr = extractedUrls.length;
    if ( lenUrlArr > 0 ) {
        for (var i = 0; i < lenUrlArr; i++) {
            url = extractedUrls[i].url;
            virtualTweet = virtualTweet.replace(url,filler);
        }
    }
    remaining = remaining - virtualTweet.length;
    return remaining;
}
Run Code Online (Sandbox Code Playgroud)

该函数返回剩余的字符数,假设所有URL(包括那些缩短为少于20个字符的URL)已被t.co"缩短"为19个字符加上一个空格.

它假定包含了twitter-text.js.

  • 使用最新的twitter-text.js,您可以将该函数重构为:`charactersleft = function(tweet){remaining = 140 - twttr.txt.getTweetLength(tweet); 返回剩余; } (2认同)

rd3*_*d3n 19

感谢moluv00的回答,为我节省了一些搜索,让我走上正轨.我只想分享我在应用程序中处理推特字符计数(由于小网址)的方式.

拉动请求作为被合并于GitHub的存储库上2012-05-31引入twttr.txt.getTweetLength(文本,选项)即正在考虑t.co网址功能和定义如下:

twttr.txt.getTweetLength = function(text, options) {
    if (!options) {
        options = {
            short_url_length: 22,
            short_url_length_https: 23
        };
    }
    var textLength = text.length;
    var urlsWithIndices = twttr.txt.extractUrlsWithIndices(text);

    for (var i = 0; i < urlsWithIndices.length; i++) {
        // Subtract the length of the original URL
        textLength += urlsWithIndices[i].indices[0] - urlsWithIndices[i].indices[1];

        // Add 21 characters for URL starting with https://
        // Otherwise add 20 characters
        if (urlsWithIndices[i].url.toLowerCase().match(/^https:\/\//)) {
            textLength += options.short_url_length_https;
        } else {
            textLength += options.short_url_length;
        }
    }

    return textLength;
};
Run Code Online (Sandbox Code Playgroud)

所以你的功能将变成:

function charactersleft(tweet) {
    return 140 - twttr.txt.getTweetLength(tweet);
}
Run Code Online (Sandbox Code Playgroud)

另外,关于t.co的最佳实践,我们应该从twitter 检索short_url_lengthshort_url_length_https值,并将它们作为twttr.txt.getTweetLength函数中的options参数传递:

在您的应用程序中每天请求一次GET帮助/配置,并将"short_url_length"(t.co的当前最大长度值)缓存24小时.缓存"short_url_length_https"(基于HTTPS的t.co链接的最大长度),并将其用作基于HTTPS的URL的长度.

特别是知道t.co网址长度的某些变化将在2013-02-20生效,Twitter开发者博客中所述

  • 我根据Twitter的新政策http://thenextweb.com/twitter/2012/12/06/twitter-take-away-two-of-my-precious-tweet-characters/更新了t.co长度.我看到GitHub上引用的代码已经这样做了. (2认同)

Tom*_*lak 2

\n

我如何能够使用 Javascript 计算字符串中的字节数,或者自从我将页面编码设置为 UTF-8 后,字符串中的每个字符总是使用 2 个字节?

\n
\n\n

JavaScript 计算的是字符而不是字节。你根本没有问题。

\n\n
"\xe5\x98\xb0\xe5\x98\xb0\xe5\x96\xb3\xe5\x96\xb3".length == 4\n"Twitter".length == 7\n
Run Code Online (Sandbox Code Playgroud)\n\n

更新:以上仅适用于只包含基本多语言平面 (BMP) 中的字符的字符串。

\n\n

当字符串包含 BMP 外部的字符(如表情符号)或组合标记时,确定字符串长度就不那么简单了。以下博客文章详尽地讨论了这个问题,强烈建议阅读: https: //mathiasbynens.be/notes/javascript-unicode

\n