Tôi đang tạo API cho ứng dụng dành cho thiết bị di động và dường như tôi gặp sự cố khi đếm chiều dài của chuỗi chứa biểu tượng cảm xúc. Mã của tôi:PHP - độ dài chuỗi chứa biểu tượng cảm xúc/ký tự đặc biệt
$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)));
phản ứng của việc này là:
strlen: 27
mb_strlen UTF-8: 14
mb_strlen UTF-16: 13
iconv UTF-16: 14
iconv UTF-16: 27
tuy nhiên tôi sẽ nhận được 17 như kết quả. Chúng tôi đã cố gắng giới hạn độ dài chuỗi trên iOS, android và cửa sổ điện thoại, đó là 17 ở khắp mọi nơi. Đoạn mã iOS (swift):
var str = "✌️ @mention"
(str as NSString).length // 17
count(str) // 13
count(str.utf16) // 17
count(str.utf8) // 27
Chúng tôi cần sử dụng NSString vì thư viện. Tôi cần điều này để có được vị trí bắt đầu và kết thúc của "@mention". Nếu chuỗi chỉ chứa văn bản hoặc chỉ các biểu tượng cảm xúc, chuỗi đó hoạt động tốt nên có thể có một số vấn đề với nội dung hỗn hợp.
Tôi đang làm gì sai? Tôi có thể cung cấp thông tin nào khác cho bạn để giúp tôi đi đúng hướng?
Cảm ơn!
hãy thử sử dụng mb_substr, chiều dài mb_str có thể là một lựa chọn –