计算推特的Javascript字符数的最佳方式
Best way to count characters in Javascript for a tweet
从Twitter API文档(http://dev.twitter.com/pages/counting_characters):
140个字符的tweet限制并没有真正计算字符,而是计算字符串的字节数。
我如何能够使用Javascript计算字符串中的字节数,或者由于我将页面的编码设置为UTF-8,字符串中的每个字符总是使用2个字节?
也许已经有一个很好的计数器功能供我使用了?
实际上,由于t.co url缩短器的原因,仅仅计算字符已经不起作用了。看看这两个推特参考,看看如何处理缩短的链接:
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;
}
该函数返回剩余的字符数,假设所有URL,包括那些缩短到20个字符以下的URL,都被t.co"缩短"为19个字符加一个空格。
它假设包含twitter-text.js。
感谢moluv00的回答,它为我节省了一些搜索,并使我走上了正轨。我只是想分享一下我在应用程序中处理推特字符计数(由于URL很小)的方法。
2012年5月31日,github存储库上合并了一个拉取请求,引入了twttr.txt.getTweetLength(text,options)函数,该函数考虑了t.co URL,定义如下:
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;
};
所以你的功能将变成:
function charactersleft(tweet) {
return 140 - twttr.txt.getTweetLength(tweet);
}
此外,关于t.co的最佳实践,我们应该从twitter中检索short_url_length和short_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-urls长度的一些更改将在2013-02-20生效,如twitter开发者博客
正如其他人所提到的,twitter将链接计算为长度为20的字符串。在我们的小项目中,我们最终使用了以下代码:
function getTweetLength(input) {
var tmp = "";
for(var i = 0; i < 20; i++){tmp+="o"}
return input.replace(/(http[s]?:'/'/['S]*)/g, tmp).length;
};
如果你使用的是angular.js,这里有一个小过滤器,你可以在angular.js应用程序中使用:
app.filter('tweetLength', function() {
return function(input) {
var tmp = "";
for(var i = 0; i < 20; i++){tmp+="o"}
return input.replace(/(http[s]?:'/'/['S]*)/g, tmp).length;
};
});
用法很简单:
Tweet length is {{tweet|tweetLength}}
我如何能够使用Javascript计算字符串中的字节数,或者由于我将页面的编码设置为UTF-8,字符串中的每个字符总是使用2个字节?
JavaScript计算字符而不是字节你一点问题都没有
"嘰嘰喳喳".length == 4
"Twitter".length == 7
更新:以上仅适用于在基本多语言平面(BMP)中只包含字符的字符串。
当字符串包含BMP之外的字符(如表情符号)或组合标记时,确定字符串长度就不那么简单了。下面的博客文章详尽地讨论了这件事,强烈建议阅读:https://mathiasbynens.be/notes/javascript-unicode
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 为react组件传递道具的最佳方式
- 让Webpack管理Quirky AMD定义的最佳方式
- 在承诺链中处理早期回报的最佳方式
- 在ng重复循环中显示条件内容的最佳方式是什么
- 在phonegap中为android调用onload函数的最佳方式
- 链接两个网页或网络应用程序的最佳方式
- 什么's是连接供应商js文件的最佳方式
- 什么's是在javascript中迭代项的最佳方式
- 在node.js中编写单元测试的最佳方式是什么
- 在页面上记录数据并实现pushstate()的最佳方式
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 什么'这是加载jQuery的最佳方式
- 将大数组(字符串和类型数组的混合物)存储到blob或文件中/从blob或文件检索大数组的最佳方式
- 在网站上显示.mov作为加载屏幕的最佳方式
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 以角度渲染表中数据的最佳方式
- 删除集合中旧邮件/帖子的最佳方式
- 显示全屏Ajax加载程序的最佳方式
- PHP和JS中表单验证的最佳方式