小编gab*_*abo的帖子

PHP - 包含表情符号/特殊字符的字符串长度

我正在为移动应用程序构建API,我似乎在计算包含表情符号的字符串的长度时遇到问题.我的代码:

$str = "?? @mention";

printf("strlen: %d" . PHP_EOL, strlen($str));
printf("mb_strlen UTF-8: %d" . PHP_EOL, mb_strlen($str, "UTF-8"));
printf("mb_strlen UTF-16: %d" . PHP_EOL, mb_strlen($str, "UTF-16"));
printf("iconv UTF-16: %d" . PHP_EOL, iconv_strlen(iconv("UTF-8", "UTF-16", $str)));
printf("iconv UTF-16: %d" . PHP_EOL, iconv_strlen(iconv("ISO-8859-1", "UTF-16", $str)));
Run Code Online (Sandbox Code Playgroud)

这个的反应是:

strlen: 27
mb_strlen UTF-8: 14
mb_strlen UTF-16: 13
iconv UTF-16: 14
iconv UTF-16: 27
Run Code Online (Sandbox Code Playgroud)

但是我应该得到17分.我们尝试在iOS,Android和Windows手机上使用字符串长度,它到处都是17.iOS(swift)片段:

var str = "?? @mention"
(str as NSString).length // 17
count(str) // 13
count(str.utf16) // 17
count(str.utf8) // 27
Run Code Online (Sandbox Code Playgroud)

由于库,我们需要使用NSString.我需要这个来获得"@mention"的起始位置和结束位置.如果字符串仅包含文本或仅包含表情符号,则它可以正常工作,因此混合内容可能存在一些问题.

我究竟做错了什么?还有什么其他信息可以让你们让我们朝着正确的方向前进?

谢谢!

php unicode unicode-string

8
推荐指数
3
解决办法
2855
查看次数

标签 统计

php ×1

unicode ×1

unicode-string ×1