我有一条短信
😁😬😂😃@提及文字😂😃
我有 @Mention 文本部分的 $start 和 $length 值,但我无法正确更改文本,当字符串包含表情符号时,前面只有几个字母
javascript 从文本中传递 $start 和 length,它理解
$start = "😁😬😂😃 @Mention ".indexOf('@') //9
我需要的结果是这样的
😁😬😂😃 <span>@Mention text</span> 😂😃
PHP 中正确的函数是什么,我可以使用子字符串替换文本。 网上查了一下,没有解决办法
电流输出
😁😬😂😃 @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);
}
}
}
我建议避免在此任务中使用所有
mb_
函数的卷积。一个简单的 preg_replace()
调用将允许您将 @mention 文本替换为所需的 HTML 标记。
代码:(PHPize演示)
$text = '😁😬😂😃 @Mention text 😂😃';
echo preg_replace(
'/(?<=^|\s)@\w+/',
'<span class="mention-link">$0</span>',
$text
);
// 😁😬😂😃 <span class="mention-link">@Mention</span> text 😂😃