php-PHP7.0:未定義の関数utf8_encode()の呼び出し
PHP 7.0で開発していますが、関数utf8_encode()を使用しようとしましたが、 "Call to undefined function utf8_encode()"
というエラーが発生しました。sudo apt-get install php7.0-xmlを使用してphp7.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-cache search 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_encodeまたはutf8_decode関数を使用するにはどうすればよいですか?
更新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-get install 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データベースで default character set latin
およびcollate latin1_spanish_ci;
を使用してWebコード化されています。
Webから、サーバーへのアドレスを要求する瞬間があり、そのアドレスには特殊文字が含まれています:
id = 2の行を返します。フィールド「direccion」には、この文字「ü」があります。アドレスをエンコードせずにリクエストにサーバーが応答しました。
リクエストはOKです。
しかし、応答:
何も応答がありません!
今のところ、@duskwuffが推奨しているようにアドレスをコード化する予定です:
$utf8_text = iconv("ISO-8859-1", "UTF-8", $row["address"])
リクエストは同じですが、応答があります!!!
Webページにアドレスを印刷すると、次のようになります。
更新4:
次のテスト...アップデート3と同じテストを実行しますが、MySQLデータベースのデフォルトの文字と照合を変更します。データベースをデフォルトの文字UTF8と照合utf8_spanish_ciに変更します。私たちのウェブページはまだUTF8でコード化されており、サーバーからの応答にはエンコードアドレスがありません。
データベースを選択すると、すべてのデータが正しく表示されます。
わかりました。リクエストとレスポンスを行いますが、何もコーディングしません。データベースのデータはUTF8に保存されることを忘れないでください。
リクエストはOKですが、リクエスト:
アップデート3のように応答がありません。
ただし、@ duskwuffの推奨事項を使用して応答をコード化すると、次のようになります。
$utf8_text = iconv("ISO-8859-1", "UTF-8", $row["direccion"]);
回答があります。そして、weページに印刷されたデータを見ることができます:
したがって、理由はわかりませんが、応答を得るためにデータを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,
答え :
解決策:
utf8_encode()
またはutf8_decode()
関数を使用しないでください。それらは誤解を招くような名前を持っています-それらは実際にISO-8859-1とUTF-8の間の変換を実行します。ほとんどの場合、それらは必要ではありません。データベースとアプリケーションは全体でUTF-8テキストを使用する必要があり、ISO-8859-1テキストをまったく処理しないでください。
実際にテキストをISO-8859-1からUTF-8に変換する必要がある場合-これはutf8_encode()
が行うことです-{-code-を使用します4}
関数:
$utf8_text = iconv("ISO-8859-1", "UTF-8", $iso_8859_1_text);
utf8_decode()
関数は完全に避けてください。 UTF-8テキストをISO-8859-1に変換し、ISO-8859-1で使用できない文字を疑問符に置き換えます。これにより、多くのヨーロッパ言語で書かれたテキストが壊れ、非ラテン語のテキスト(ロシア語や中国語など)が完全に読めなくなります。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。