【问题标题】:mb_convert_encoding, undefined function while mbstring is enabledmb_convert_encoding,启用 mbstring 时未定义的函数
【发布时间】:2012-01-06 04:10:27
【问题描述】:

我有一台运行 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() 已经显示它已启用。我不知道为什么它以前不起作用:/

【问题讨论】:

  • 当您尝试任何 mb_* 函数时,错误消息是什么?
  • Web 服务器配置与 CLI 配置?你到底在哪里看到了什么?
  • 你安装了 libmbfl 吗?如果是这样 - 它应该在 phpinfo() 输出中显示为 mbstring 下的“多字节字符串引擎”。
  • 是的,我已经安装了。但是,我刚刚注意到“Zend 多字节支持”被禁用。有没有办法在不重新编译 PHP 的情况下启用它?
  • 我认为这与 mbstring 扩展无关。

标签: php multibyte-functions


【解决方案1】:

很多较新的 Linux 服务器默认没有安装 PHP 多字节模块。一个简单的解决方案通常是安装 php-mbstring。

在 Red Hat 风格(CentOS、Fedora 等)上,您可以使用 yum install php-mbstring。

确保之后重新启动 Apache 服务器。在 RH 风格上使用 service httpd restart。

【讨论】:

  • sudo apt-get install php7.0-mbstring 然后sudo service php7.0-fpm restart 为我做了诀窍。谢谢!
  • 我还编辑了 /etc/php/7.0/mods_available/mbstring.ini 并删除了 ;为延长线。突然它开始为我工作:)
  • 安装后需要运行sudo service apache2 restart。
【解决方案2】:

有时人们会收到这种错误:致命错误:在第 188 行的 /public_html/this/this.php 中调用未定义的函数 mb_convert_encoding()。通常这种错误也会出现在 PHP 站点和 PHP 框架中。

您的服务器上似乎没有安装 PHP mbstring。

解决方案:

在我的情况下,我刚刚取消注释 php.ini 文件中的 ;extension=php_mbstring.dll 并且问题已经解决。

取消注释后不要忘记重启apache服务器;extension=php_mbstring.dll

取自此博客的代码:http://chandreshrana.blogspot.in/2016/01/call-to-undefined-function.html

【讨论】:

  • 这对我来说是可行的解决方案(使用 windows、IIS、php 7.4)。不要忘记重新启动 IIS。
【解决方案3】:

在你安装的是php5.6的情况下类似neilsimp1的解决方案:

运行 sudo apt-get install php7.0-mbstring 然后 sudo service php7.0-fpm restart 对我有用。

sudo apt-get install php5.6-mbstring

然后重启apache服务

sudo service apache2 restart.

【讨论】:

    【解决方案4】:

    检查是否安装了 MBString

    您可以通过-m (Show compiled in modules) arg...了解它是否实际安装...

    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
    

    请参考第 1 步,检查 MBString 是否实际安装。

    【讨论】:

    • 这是非常系统特定的,不是很广泛适用; php70w-mbstring 来自哪里?大多数人不再将 PHP 作为 Apache 模块运行,如果他们这样做了,很有可能旧的 sysv init 脚本不可用;现在大多数系统都使用 systemd。
    • 哎呀,这实际上是一个复制/粘贴错误,感谢您的关注,我本来打算在那里有php7.0-mbstring
    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2017-04-09
    • 2023-03-17
    • 2018-03-12
    • 2017-10-19
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多