Php 替换mb_substr的替代品?
我需要在多字节字符串上使用Php 替换mb_substr的替代品?,php,Php,我需要在多字节字符串上使用substr,而不破坏它,但是PHP mb_uu扩展不可用。是否有替换mb_substr?您可以使用的库,该库提供了许多Unicode函数和mb_函数的后备功能,如果它们不可用的话。这是一个简单的替代品,只需像往常一样包含它并使用mb_substr。不过,它确实需要PHP5.3。如果字符串是unicode,则可以使用空模式来完成此操作 一个简单的实现可以是: function my_mb_substr($string, $offset, $length) { $ar
substr
,而不破坏它,但是PHP mb_uu扩展不可用。是否有替换mb_substr
?您可以使用的库,该库提供了许多Unicode函数和mb_
函数的后备功能,如果它们不可用的话。这是一个简单的替代品,只需像往常一样包含它并使用mb_substr
。不过,它确实需要PHP5.3。如果字符串是unicode,则可以使用空模式来完成此操作
一个简单的实现可以是:
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); // 庆大
我的猜测是你有HTML实体,所以你的文本实际上是这样的:
EDF, leader mondial de l'énergie nucléaire
。。。通过web浏览器渲染后,其显示为:
EDF, leader mondial de l'énergie nucléaire
这与多字节问题无关。根本问题是HTML是一种富文本格式,不能像纯文本那样随意操作
您需要获得可以处理的数据的纯文本表示形式。您可以使用剥离HTML标记,但需要在截断之前完成。之后,您可以使用以下函数转换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');
mb_substr
有什么问题吗?如果你得到l'&e
,你的文本就不能是l'é
。你有没有具体的理由想要重新发明一个轮子mb_substr
已经解决了(混合隐喻)?致命错误:调用未定义的函数mb_substr()在第4行的/var/www/html/2011/anand/ajax.php中,您没有启用mb扩展吗?那你就有点困难了。最好的办法是启用它。这真的不可能吗?+1如果(!function_exists('mb_substr')){function mb_substr…}
不太可靠,我甚至会用它来代替mb_substr
?你能详细解释一下吗?@deceze-当然,我说得太含糊了。谢谢。你能说出一个mb.
支持html.
不支持的实体吗?我以前从未遇到过这个问题,所以我将借此机会向您询问我把这个题目的笔记丢了。我最好编辑答案并省略这样的引用,这样我就不会把任何人搞糊涂了