php - 如何在PHP中获取包含组合字符的Unicode字符串的 "rendered length"?

标签 php string unicode localization internationalization

考虑到并非所有 unicode 组合字符都有等效的预组合字符 (NFC),如果这可能/在语义上有意义,是否有办法使用 PHP 获取字符串的“呈现”长度?

http://3v4l.org/L1kPl (使用 php7 转义语法)

<?php
echo $s = "\u{0071}\u{0307}\u{0323}";
echo "\n";
echo mb_strlen(Normalizer::normalize($s, Normalizer::FORM_C), "UTF-8");
// Shows 3 because there is no precomposed equivalent
// for such glyph. I want to get 1 instead

到目前为止我取得的成就:http://3v4l.org/4NSCi

<?php
echo $s = "\u{0071}\u{0307}\u{0323}";
$r = Normalizer::normalize($s, Normalizer::FORM_C);
echo mb_strlen(preg_replace("@\p{Mn}@u", "", $r), "UTF-8");

最佳答案

您可能正在寻找:

grapheme_strlen()

它需要一个参数,该参数必须是有效的 utf-8 字符串。 这是引用:Graphme cluster boundaries

关于php - 如何在PHP中获取包含组合字符的Unicode字符串的 "rendered length"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589129/

相关文章:

c# - 在 if 语句中实现字符串和 OR 函数 (||)

android - 如何检查任何设备是否支持表情符号?

java - 使用 Unicode 字符进行 Lucene 搜索

php - 使用 PHP 的 native SOAP 类时生成 WSDL?

php如何将评论sql链接到博客sql

php - CakePHP 输出一个选择输入,用于从连接表中选择一个值

python - 在 tkinter 标签 Python 中显示平方根符号

php - MySQL:基于国家/地区的产品列表

java - 如何以逗号分割字符串但保留空格?

mysql - 如何在 MySQL 中将逗号分隔字段扩展为多行