考虑到并非所有 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");
最佳答案
关于php - 如何在PHP中获取包含组合字符的Unicode字符串的 "rendered length"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589129/