我正在为移动应用程序构建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"的起始位置和结束位置.如果字符串仅包含文本或仅包含表情符号,则它可以正常工作,因此混合内容可能存在一些问题.
我究竟做错了什么?还有什么其他信息可以让你们让我们朝着正确的方向前进?
谢谢!