带有表情符号的PHP mb子串功能

时间:2017-12-20 14:04:51

标签: php emoji multibyte

我有一个文字

  

@Mention text

我有@Mention文本部分的$ start和$ length值,但我无法正确更改文本,当字符串包含表情符号时,它提前几个字母

javascript从文本传递$ start和length,它理解

$start = " @Mention ".indexOf('@') //9

结果我需要的是

 <span>@Mention text</span> 

PHP中的正确函数是什么,我可以使用substring替换文本。 我看过网上,但没有解决方案

当前输出

 @Ment<span>ion text</span> 
$formatted = ' @Mention text ';
$content = $this->mb_substr_replace(
                    $formatted ?: '',
                    "<span class='mention-link'>" . mb_substr($formatted ?: '', $mention->getStart() ?: 0, $mention->getLength() ?: 0, 'UTF-8') . "</span>",
                    9,
                    5,
                    'UTF-8'
                );

和函数本身

public function mb_substr_replace($string,$replacement,$start,$length=null,$encoding = null){
    if ($encoding == null){
        if ($length == null){
            return mb_substr($string,0,$start).$replacement;
        }
        else{
            return mb_substr($string,0,$start).$replacement.mb_substr($string,$start + $length);
        }
    }
    else{
        if ($length == null){
            return mb_substr($string,0,$start,$encoding).$replacement;
        }
        else{
            return mb_substr($string,0,$start,$encoding). $replacement. mb_substr($string,$start + $length,mb_strlen($string,$encoding),$encoding);
        }
    }
}

0 个答案:

没有答案