使用PHP计算推文长度,就像推特一样

我想像推特一样计算推文长度,我尝试在这里使用和所有这些类型mb_strlenstrlen


问题是twitter计数为15,但是我得到了这些结果,我不知道twitter如何计算表情符号以及如何用php来处理这个问题"👍🏿✌🏿️ @mention"


我的结果:


strlen: 27

mb_strlen UTF-8: 14

mb_strlen UTF-16: 13

iconv UTF-16: 14

iconv UTF-16: 27


凤凰求蛊
浏览 127回答 2
2回答

弑天下

来自 Twitter 的开发者文档:对于具有Unicode处理经验的程序员来说,这个问题的简短答案是,推文长度是通过文本的NFC规范化版本中的码位数来衡量的。因此,要计算PHP中推文的长度,您将首先使用规范化表单C(NFC)规范化文本,然后计算规范化文本中的码位(不是字符)的数量。$text = "👍🏿✌🏿️ @mention";// Get the normalized text in UTF-8$NormalizedText = Normalizer::normalize($text, Normalizer::FORM_C );// Now we can calculate the number of codepoints in this normalized text$it = IntlBreakIterator::createCodePointInstance();$it->setText($NormalizedText);$len = 0;foreach ($it as $codePoint) {    $len++;}echo "Length = $len"; // Result: Length = 15

元芳怎么了

在某些情况下,@Sherif答案不起作用。我发现这个库运行良好nojimage/twitter-text-php这是我的代码use Twitter\Text\Parser;$validator = Parser::create()->parseTweet($caption);        if ($validator->weightedLength > 280) {    throw new MessageException("Maximum post length is 280 characters.");}
打开App,查看更多内容
随时随地看视频慕课网APP