提问者:小点点

PHP7。0:调用未定义的函数utf8_encode()


我正在用PHP 7.0开发,我试图使用函数utf8_encode(),我得到了错误调用未定义的函数utf8_encode()

我必须尝试安装php7。带有sudo apt get install php7的0-xml模块。0-xml,我得到以下错误:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 php7.0-xml : Depends: php7.0-common (= 7.0.18-0ubuntu0.17.04.1) 
but 7.0.18-1+deb.sury.org~yakkety+1 is to be installed
E: Unable to correct problems, you have held broken packages.

如果我使用sudo apt缓存搜索php7。0-*我得到了以下结果:

libapache2-mod-php7.0 - lado servidor, lenguaje de guionización HTML-embebido (módulo Apache 2)
php7.0 - Lenguaje de guión empotrado para HTML en el lado del servidor (metapaquete)
php7.0-cgi - Lenguaje de guiones embebidos en HTML para servidores (binario CGI)
php-all-dev - package depending on all supported PHP development packages
php7.0-cli - command-line interpreter for the PHP scripting language
php7.0-common - documentation, examples and common module for PHP
php7.0-curl - CURL module for PHP
php7.0-dev - Files for PHP7.0 module development
php7.0-gd - GD module for PHP
php7.0-gmp - GMP module for PHP
php7.0-json - JSON module for PHP
php7.0-ldap - LDAP module for PHP
php7.0-mysql - MySQL module for PHP
php7.0-odbc - ODBC module for PHP
php7.0-opcache - Zend OpCache module for PHP
php7.0-pgsql - PostgreSQL module for PHP
php7.0-pspell - pspell module for PHP
php7.0-readline - readline module for PHP
php7.0-recode - recode module for PHP
php7.0-snmp - SNMP module for PHP
php7.0-sqlite3 - SQLite3 module for PHP
php7.0-tidy - tidy module for PHP
php7.0-xml - DOM, SimpleXML, WDDX, XML, and XSL module for PHP
php7.0-xmlrpc - XMLRPC-EPI module for PHP
php-geoip - GeoIP module for PHP
php-xdebug - Xdebug Module for PHP
libphp7.0-embed - HTML-embedded scripting language (Embedded SAPI library)
php-amqp - AMQP extension for PHP
php-apcu - APC User Cache for PHP
php-gearman - PHP wrapper to libgearman
php-gmagick - Provides a wrapper to the GraphicsMagick library
php-gnupg - PHP wrapper around the gpgme library
php-http - PECL HTTP module for PHP Extended HTTP Support
php-igbinary - igbinary PHP serializer
php-imagick - Provides a wrapper to the ImageMagick library
php-libsodium - PHP wrapper for the Sodium cryptographic library
php-mailparse - Email message manipulation for PHP
php-memcache - memcache extension module for PHP
php-memcached - memcached extension module for PHP, uses libmemcached
php-mongodb - MongoDB driver for PHP
php-msgpack - PHP extension for interfacing with MessagePack
php-oauth - OAuth 1.0 consumer and provider extension
php-pinba - Pinba module for PHP
php-propro - propro module for PHP
php-ps - ps module for PHP
php-radius - radius client library for PHP
php-raphf - raphf module for PHP
php-redis - PHP extension for interfacing with Redis
php-remctl - PECL module for Kerberos-authenticated command execution
php-rrd - PHP bindings to rrd tool system
php-smbclient - PHP wrapper for libsmbclient
php-solr - PHP extension for communicating with Apache Solr server
php-ssh2 - Bindings for the libssh2 library
php-stomp - Streaming Text Oriented Messaging Protocol (STOMP) client module for PHP
php-tideways - Tideways PHP Profiler Extension
php-uploadprogress - file upload progress tracking extension for PHP
php-uuid - PHP UUID extension
php-yac - YAC (Yet Another Cache) for PHP
php-yaml - YAML-1.1 parser and emitter for PHP
php-zmq - ZeroMQ messaging bindings for PHP
php7.0-bcmath - Bcmath module for PHP
php7.0-bz2 - bzip2 module for PHP
php7.0-dba - DBA module for PHP
php7.0-enchant - Enchant module for PHP
php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.0-imap - IMAP module for PHP
php7.0-interbase - Interbase module for PHP
php7.0-intl - Internationalisation module for PHP
php7.0-mbstring - MBSTRING module for PHP
php7.0-mcrypt - libmcrypt module for PHP
php7.0-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary)
php7.0-soap - SOAP module for PHP
php7.0-sybase - Sybase module for PHP
php7.0-xsl - XSL module for PHP (dummy)
php7.0-zip - Zip module for PHP

我正在使用ubuntu,我的版本是:

如何使用utf8\u编码或utf8\u解码功能?

更新1:

我已尝试安装php7。0-common,我得到了这个结果:

php7.0-common is already in its most recent version 
(7.0.18-1+deb.sury.org~yakkety+1).

如何安装php7。0-xml模块?

更新2:

我必须尝试安装sudo apt获取安装php7。0-mbstring,但我尚未安装此模块。

我必须尝试安装另一个模块sudo apt get install php7。0-xmlrpc和我得到了相同的结果:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 php7.0-xml : Depends: php7.0-common (= 7.0.18-0ubuntu0.17.04.1) 
but 7.0.18-1+deb.sury.org~yakkety+1 is to be installed
E: Unable to correct problems, you have held broken packages.

这对我不起作用。

更新3:原始设置:在UTF-8和MySQL数据库中使用默认字符集拉丁语校对拉丁语1\u西班牙语\u ci编码的Web

从网络上有一个时刻,我们要求服务器的地址,在地址中我们有特殊的字符:

我们将返回id=2的行。在“direccion”字段中,我们有一个字符“ü”。服务器响应请求而不编码地址,我得到:

请求是可以的。

但是回应是:

什么都没有,没有回应!

现在,我们将像@duskwuff推荐的那样编码地址:

$utf8_text = iconv("ISO-8859-1", "UTF-8", $row["address"])

请求是相同的,但我们现在得到了响应!!!

如果我们在网页上打印地址,我们得到:

更新4:

下一个测试。。。我们将进行与更新3相同的测试,但更改MySQL数据库的默认字符和排序规则。我们将数据库更改为默认字符UTF8和排序规则UTF8\u西班牙语\u ci。我们的网页仍然用UTF8编码,服务器的响应没有编码地址。

如果我选择数据库,我们可以正确地看到所有的数据。

好啊我将发出请求和响应,但不编写任何代码。别忘了,数据库中的数据保存在UTF8中。

请求可以,但是请求:

没有响应,就像更新3一样。

但是,如果我们用@Dashwuff的建议对响应进行编码:

$utf8_text = iconv("ISO-8859-1", "UTF-8", $row["direccion"]);

我们得到了回应;我们可以看到打印在我们页面上的数据:

因此,我不知道为什么,但我必须将数据编码到UTF8以获得响应。

我使用以下内容创建模式和表:

CREATE SCHEMA IF NOT EXISTS `31juegos` DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci;

CREATE TABLE IF NOT EXISTS `31juegos`.`tbl006_direccion` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `jugador_id` INT UNSIGNED NOT NULL,
  `provincia_id` INT UNSIGNED NOT NULL,
  `direccion` VARCHAR(100) NOT NULL,
  `ciudad` VARCHAR(50) NOT NULL,
  `codigo_postal` VARCHAR(5) NOT NULL,
  `pais` VARCHAR(50) NOT NULL,
  `telefono` VARCHAR(12) NULL,
  `fecha` DATETIME NOT NULL DEFAULT now(),
  PRIMARY KEY (`id`),
  INDEX `fk_tbl006_direccion_tbl005_jugador1_idx` (`jugador_id` ASC),
  INDEX `fk_tbl006_direccion_tbl020_provincia1_idx` (`provincia_id` ASC),
  CONSTRAINT `fk_tbl006_direccion_tbl005_jugador1`
    FOREIGN KEY (`jugador_id`)
    REFERENCES `31juegos`.`tbl005_jugador` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_tbl006_direccion_tbl020_provincia1`
    FOREIGN KEY (`provincia_id`)
    REFERENCES `31juegos`.`tbl020_provincia` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

我们编纂的领域是:

`direccion` VARCHAR(100) NOT NULL,

共1个答案

匿名用户

不要使用utf8\u encode()utf8\u decode()功能。它们有误导性的名称——它们实际上执行ISO-8859-1和UTF-8之间的转换。在大多数情况下,它们不应该是必要的;您的数据库和应用程序应始终使用UTF-8文本,并且绝对不应处理ISO-8859-1文本。

如果您确实需要将文本从ISO-8859-1转换为UTF-8-这就是utf8_encode()所做的-使用iconv()函数:

$utf8_text = iconv("ISO-8859-1", "UTF-8", $iso_8859_1_text);

完全避免使用utf8\u decode()函数。它将UTF-8文本转换为ISO-8859-1,并用问号替换ISO-8859-1中不可用的任何字符。这将破坏用许多欧洲语言编写的文本,并使非拉丁语文本(如俄语或汉语)完全无法阅读。