utf8_(en|de)code 从 php7 中删除?

Posted

技术标签:

【中文标题】utf8_(en|de)code 从 php7 中删除?【英文标题】:utf8_(en|de)code removed from php7? 【发布时间】:2016-06-12 14:53:51 【问题描述】:

我最近在我的开发服务器上切换到 php 7,它运行良好 - 直到现在。

自从我更新到 PHP 7.0.3-10+deb.sury.org~trusty+1(今天早些时候)后,utf8_decodeutf8_encode 函数不再可用。但是,它们在 PHP7 的早期版本中。调用时,会引发致命错误。

我读到这些功能是由mbstring 扩展提供的,我检查了var_dump(extension_loaded('mbstring')); 是否已加载。

我怎样才能让上述功能再次工作?

【问题讨论】:

mbstring 不提供此功能。奇怪的是,它在XML Parser Functions 中列出。也许您想详细说明错误消息?对我的(自定义)PHP7 的快速测试表明它“仍然”有效...... 完整的错误消息是Fatal error: Uncaught Error: Call to undefined function utf8_encode() in ...。我设法将编码功能替换为mb_convert_encoding($value, 'UTF-8'),但我仍然想知道是什么导致了错误。 我需要该函数来转换从 LDAP 获得的字符串。关于错误消息,我还能说些什么? 这是 same 包吗?也就是7.0.3-9没有产生这个错误吗?如果是这样,您可能需要考虑使用deb.sury.org 提交错误报告。 很遗憾,我不记得服务器之前运行的是哪个版本,但是在更新到7.0.3-10之前肯定没有出现错误。我将对PHP7最近的变化做一些研究。谢谢你让我走上正轨! 【参考方案1】:

在 Ubuntu 16.04 LTS 中,使用 php 5.6,尝试:

sudo apt-get install php5.6-xml
sudo service apache2 restart

【讨论】:

【参考方案2】:

我遇到了同样的问题。只需安装php7.0-xml 包。 Ubuntu 16.04:

sudo apt-get install php7.0-xml

编辑:重新启动 apache2 以加载新包。

【讨论】:

重启 apache 应该是粗体。但是谢谢你,这对我有用。 请注意,utf8_encodeutf8_decode 自 7.2 起已移至 ext/standard,因此从那时起它们将始终可用(ext/standard 始终可用)。 软件包在apt上改名了,你应该使用sudo apt-get install php-xml 如果您将nginxphp-fpm 一起使用,则相同的解决方案可以工作,当然,您需要重新启动nginx 不,你需要重新启动php-fpm,如果你以fast-cgi运行它,web服务器与重新加载php无关。【参考方案3】:

由于投票最多的答案对我不起作用,我找到了另一个 php7 软件包(从它的名字来看)它为我修复了它

sudo apt-get install php7.0-mbstring

【讨论】:

只需使用sudo apt install php-mbstring 也可以解决问题 - 没有版本问题。【参考方案4】:

如果你在 CentOS 上,下面的命令应该可以工作:

yum install php-xml

【讨论】:

...Fedora 24 相同【参考方案5】:

我遇到了同样的问题,对我来说,

sudo apt-get install php-patchwork-utf8

并重新启动 apache2 服务器解决了问题(在 Ubuntu 16.04 LTS 上)。

【讨论】:

【参考方案6】:

在 Ubuntu 上,您在升级 PHP7 期间收到以下消息:

php7.0 (7.0.3-6) unstable; urgency=medium

  * Several extensions have been split into separate extension packages:
   - php-dba - Database (dbm-style) Abstraction Layer
   - php-mbstring - Multibyte String
   - php-soap - SOAP
   - php-xml - DOM, SimpleXML, WDDX, XML, XMLReader and XMLWriter
   - php-zip - Zip
  * The new packages are not installed automatically, so you will need to
    install them by hand, if you use the functions in those modules.
  * Most modules that have been builtin before are now included in
    php7.0-common package and they are enabled by default for your
    convenience.  You can disable unneede modules via phpdismod tool.

 -- Ondřej Surý <ondrej@debian.org>  Mon, 22 Feb 2016 12:37:09 +0100

所以它是导致问题的那些软件包之一。在这种情况下,它是php-xml

注意

新包不会自动安装

你可以解决这个问题

sudo apt-get install php-xml
sudo apache2ctl graceful

【讨论】:

如果有人遇到php7.0中找不到的mb_regex_encoding,安装php-mbstring对我有用。【参考方案7】:

utf8_decode 和 utf8_encode 函数可在 php 7 中访问:

function.utf8-encode - manual - php

这是因为你的 php 安装中缺少 php-xml 包。

如果您的服务器正在运行 Mandrake,请输入“urpmi php-xml”。

如果您的服务器在 Windows 上运行 EASYPHP,请单击 EASYPHP 徽标以激活 php-xml 模块。

在 debian 或 ubuntu 上试试:

apt-get install php7.0-xmlrpc

【讨论】:

php7.0-xmlrpcphp7.0-xml,或两者兼而有之?

以上是关于utf8_(en|de)code 从 php7 中删除?的主要内容,如果未能解决你的问题,请参考以下文章

从 google api 获取 EN、IT、FR、DE、ES 本地化城市名称

setlocale(LC_CTYPE,“de_DE.UTF8”)或setlocale(LC_CTYPE,“de_DE.UTF-8”)?

MS VS 2010:将语言设置从 de 更改为 en

MS VS 2010:将语言设置从 de 更改为 en

注册人Usarios EN PHP CON VALIDACION DE DATOS Y ACTIVACIÓN POR MAIL-5

从PHP5到PHP7的注意事项——PHP7全面删除Mysql扩展支持