目次
回复内容:
ホームページ バックエンド開発 PHPチュートリアル iconv - PHP中UTF8和UTF-8可以混用吗?

iconv - PHP中UTF8和UTF-8可以混用吗?

Jun 06, 2016 pm 08:51 PM
iconv php utf-8

同事使用iconv进行编码转换时使用的时UTF8,而不是UTF-8,我测试了下发现UTF8和UTF-8在iconv和mb_str中结果是一样的,如: iconv('UTF8', 'GB2312', '测试');iconv('UTF-8', 'GB2312', '测试');。但是Google了下发现也有人因为使用UTF8而不是UTF-8遇到问题的情况 http://readyfighting.com/archives/156。

那么请问二者使用起来有什么不同吗?

回复内容:

同事使用iconv进行编码转换时使用的时UTF8,而不是UTF-8,我测试了下发现UTF8和UTF-8在iconv和mb_str中结果是一样的,如: iconv('UTF8', 'GB2312', '测试');iconv('UTF-8', 'GB2312', '测试');。但是Google了下发现也有人因为使用UTF8而不是UTF-8遇到问题的情况 http://readyfighting.com/archives/156。

那么请问二者使用起来有什么不同吗?

根据 libiconv-1.14/lib/encodings.def , UTF-8和UTF8都会被识别成utf8编码,所以没有区别,所以所有使用libiconv的程序都没问题,比如php的iconv库。

/* General multi-byte encodings */

DEFENCODING(( "UTF-8",                  /* IANA, RFC 2279 */
            /*"UTF8",                      JDK 1.1 */
            /*"CP65001",                   Windows */
            ),   
            utf8,
            { utf8_mbtowc, NULL },        { utf8_wctomb, NULL })
#ifdef USE_HPUX_ALIASES
DEFALIAS(     "UTF8",                   /* HP-UX */
            utf8)
#endif
ログイン後にコピー

根据 ext/mbstring 的 mbfilter_utf8.c ,UTF-8 (作为name/mimename) 和 UTF8 (作为alias)也都可以被识别,所以也一样。

static const char *mbfl_encoding_utf8_aliases[] = {"utf8", NULL};

const mbfl_encoding mbfl_encoding_utf8 = { 
    mbfl_no_encoding_utf8,
    "UTF-8",
    "UTF-8",
    (const char *(*)[])&mbfl_encoding_utf8_aliases,
    mblen_table_utf8,
    MBFL_ENCTYPE_MBCS
};
ログイン後にコピー

顺便说一下,mysql不识别 utf-8,必须用utf8。

mysql> create table t1 (id int primary key, name int) character set utf-8;
ERROR 1115 (42000): Unknown character set: 'utf'

你好,我在windows环境下测试了一行代码

iconv('UTF8', 'GB2312', '测试');
ログイン後にコピー

得到一个警告

Notice: iconv(): Wrong charset, conversion from `UTF8' to `GB2312' is not allowed
ログイン後にコピー

这说明应该使用UTF-8这种形式才是正确的。

mbstring.supported-encodings 提到的mbstring支持的编码中也只有UTF-8这种形式。

或许是你可以尝试修改一下php.ini

error_reporting = E_ALL | E_STRICT
display_errors = On
ログイン後にコピー

也许就可以看到警告信息了。

根据felix021的提示,再测试两行代码

print_r(mb_list_encodings());
print_r(mb_encoding_aliases('UTF8'));
ログイン後にコピー

可知mb中的确是做为别名处理了。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

See all articles