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.
不支持的实体吗?我以前从未遇到过这个问题,所以我将借此机会向您询问我把这个题目的笔记丢了。我最好编辑答案并省略这样的引用,这样我就不会把任何人搞糊涂了