mbstring启用时,mb_convert_encoding出现未定义函数的问题

33

我有一台运行 PHP 5.3.8、Apache2 和 MySQL 的服务器 (Ubuntu 11.10 x64)。我目前在做一个需要使用特定字符编码的项目,但我发现没有任何多字节 (mb_*) 函数可用。

然而,当我查看 phpinfo() 时,我看到多字节支持已启用。

我尝试了像 apt-get install php5-mbstring、php-mbstring、php-multibyte 等等,但都没有起作用。

有人能为我指明正确的方向吗?提前谢谢!

编辑:通过重新编译 PHP 解决了问题(这是我最后的手段,最初我想避免这样做)

./configure --enable-mbstring

奇怪的是,phpinfo() 已经显示它已经启用了。我不知道之前为什么不起作用 :/


1
当您尝试使用任何mb_*函数时,会出现什么错误信息? - Emir Akaydın
1
Web服务器配置与CLI配置?你在哪里看到什么? - deceze
1
你是否已经安装了libmbfl?如果是的话,它应该在phpinfo()输出中显示为“mbstring”下的“Multibyte string engine”。 - Narf
@EmirAkaydın - 调用未定义的函数mb_substr或mb_convert_encoding。 - Harold
现在删除你的问题并获得“自律徽章”吧 ;) - Emir Akaydın
显示剩余3条评论
4个回答

49

许多新的Linux服务器默认情况下没有安装PHP Multibyte模块。一个简单的解决方案通常是安装php-mbstring。

在Red Hat系统(CentOS、Fedora等)中,您可以使用yum install php-mbstring命令安装。

确保之后重新启动Apache服务器。在Red Hat系统中,使用service httpd restart命令重启。


15
对我而言,sudo apt-get install php7.0-mbstring 然后 sudo service php7.0-fpm restart 这两步就解决了问题。谢谢! - neilsimp1
我还编辑了 /etc/php/7.0/mods_available/mbstring.ini 文件,并删除了扩展行前面的分号。突然间,它就开始对我起作用了 :) - Maarten Kieft
1
安装完成后需要运行 sudo service apache2 restart。 - Baharuni Asif

8
在您的安装中,如果您的php版本是5.6,则可以采用neilsimp1的解决方案:运行sudo apt-get install php7.0-mbstring,然后重启sudo service php7.0-fpm即可。
sudo apt-get install php5.6-mbstring

然后重新启动Apache服务。

sudo service apache2 restart.

2
有时人们会遇到这种错误:致命错误:在/public_html/this/this.php的第188行调用未定义函数mb_convert_encoding()。通常这种错误会出现在PHP网站和PHP框架中。
看起来像是你的服务器上没有安装PHP mbstring。
解决方法:
在我的情况下,我只需取消php.ini文件中的;extension=php_mbstring.dll注释即可解决该问题。
不要忘记取消注释后重启apache服务器。
代码取自此博客:http://chandreshrana.blogspot.in/2016/01/call-to-undefined-function.html

这是我使用 Windows、IIS 和 PHP 7.4 的可行解决方案。别忘了重新启动 IIS。 - LAamanni

0

检查是否安装了MBString

您可以使用-m(显示已编译的模块)参数来确定它是否实际安装...

php -m | grep mbstring

如果已经安装,您将从上述输出中看到mbstring,如果未安装,则为空白。

安装 MBString

如果您有最新的PHP(目前是PHP8),可以使用以下命令进行安装...

apt-get install php-mbstring 
yum install php-mbstring

如果你有PHP7,并且需要一个较旧的MBString版本,请安装...

apt-get install php7.0-mbstring
yum install php7.0-mbstring

重启服务器

在命令行中输入以下内容以在安装后重启服务器:

/etc/init.d/apache2 restart

返回第一步检查是否已安装MBString。


这是非常系统特定的,不是很普遍适用的;php70w-mbstring来自哪里?大多数人不再将PHP作为Apache模块运行,如果他们这样做,旧的sysv init脚本很可能不可用;现在大多数系统使用systemd。 - miken32
哎呀,那其实是一个复制/粘贴错误,谢谢你发现了,我想要的是php7.0-mbstring - HoldOffHunger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接