我需要在多字节字符串上使用substr
而不破坏它,但PHP mb_扩展名不可用。是否有mb_substr
的替代品?
答案 0 :(得分:6)
如果您的字符串是unicode,那么您可以使用preg_split以空模式执行此操作。
一个简单的实现可能是:
function my_mb_substr($string, $offset, $length)
{
$arr = preg_split("//u", $string);
$slice = array_slice($arr, $offset + 1, $length);
return implode("", $slice);
}
echo my_mb_substr("重庆大学", 1, 2); // 庆大
答案 1 :(得分:3)
您可以使用Patchwork UTF-8,这是一个为mb_
函数提供许多Unicode函数和回退的库,如果它们不可用。这是替代品,只需include
,并像往常一样使用mb_substr
。它确实需要PHP 5.3。
答案 2 :(得分:1)
我有根据的猜测是你有HTML实体,所以你的文字实际上是这样的:
EDF, leader mondial de l'énergie nucléaire
...通过网络浏览器呈现,显示为:
EDF, leader mondial de l'énergie nucléaire
这与多字节问题无关。根本问题是HTML是一种富文本格式,不能像普通文本那样随意操作。
您需要获得可以处理的数据的纯文本表示。您可以使用strip_tags()删除HTML标记,但需要在截断之前完成。之后,您可以使用html_entity_decode()函数转换HTML实体:
$text = "EDF, leader mondial de l'énergie nucléaire";
$output = html_entity_decode($text, ENT_COMPAT | ENT_HTML401, 'UTF-8');
...假设您的网站使用UTF-8。
注意:MB扩展提供了类似的功能:
$text = "EDF, leader mondial de l'énergie nucléaire";
$output = mb_convert_encoding($text, 'UTF-8', 'HTML-ENTITIES');