【问题标题】:How to face with emojicons in strings?如何面对字符串中的表情符号?
【发布时间】:2017-11-14 06:47:13
【问题描述】:

如何将表情符号计为单个字符?

我有以下记录,其中包含 Telegram 消息应用程序制作的两个表情符号和链接属性:

{ "text":"abc \ud83d\ude00\ud83e\udd23 www.google.com def", "entities": [{"offset":9,"length":14,"type":"url"}] }

我需要在字符串中找到链接,但使用 substr() 和 mb_substr() 无法在表情符号上正常工作。

substr(9, 14) 

返回

“إ¸ثœâ‚¬ www.google”

将每个表情符号读取为 4 个字符

mb_substr(9, 14) 

返回

“w.google.com d”

将每个表情符号读取为 1 个字符

我需要一个函数将每个表情符号读取为 2 个字符。


编辑:我需要澄清除了链接之外还有其他实体。所以只找到链接并不是真正的解决方案。

【问题讨论】:

标签: php emoji multibyte


【解决方案1】:

要从字符串中获取 URL,您可以这样做:

<?php
    $string = 'abc \ud83d\ude00\ud83e\udd23 www.google.com def';
    $sections = explode(' ', $string);
    $urls = array();
    foreach($sections as $section){
        preg_match('{\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net)\b}mi', $section, $matches, PREG_OFFSET_CAPTURE);
        if(isset($matches[0][0]) and $matches[0][0]!='')
            $urls[] = $matches[0][0];
    }

    print_r($urls);
?>

【讨论】:

  • 谢谢。但我需要找到实体数组项寻址的子字符串。不仅仅是序数链接
  • 在您发表评论后,我对此进行了研究,但找不到解决方案,您可以检查参数中是否有 url,使用 preg_match 和 fetch URLs 执行此操作
猜你喜欢
  • 2014-04-06
  • 2015-03-17
  • 1970-01-01
  • 2016-03-22
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多