首頁 php教程 php手册 php iconv() 编码转换出错 Detected an illegal character

php iconv() 编码转换出错 Detected an illegal character

May 25, 2016 pm 04:53 PM
character iconv

原型:string iconv ( string $in_charset , string $out_charset , string $str )

特别是第二个参数说明:the output charset.

用iconv()转换一个输出字符编码不支持的字符时,如iconv('utf-8', 'gb2312', 'www.phprm.com'),会遇到这样的错误提示:notice: iconv() [function.iconv]: detected an illegal character in input string ...

因为gb2312表示的是简体中文,不支持像"www.phprm.com"之类的更为复杂的汉字以及一些特殊字符,这当然会报错了,解决办法有两种:

1. 扩大输出字符编码的范围,如iconv('utf-8', 'gbk', 'www.phprm.com'),则可以正确地输出,因为gbk支持的字符范围更广;

2. 在输出的字符编码字符串后面加上"//ignore",如iconv('utf-8', 'gb2312//ignore', 'www.phprm.com'),这样做其实是忽略了不能转换的字符,避免了出错但却不能够正确地输出(即空白不、输出)。

下面来看看关于php教程 iconv() : detected an illegal character in input string处理方法:

$str = iconv('utf-8', 'gbk//ignore', unescape(isset($_get['str'])? $_get['str']:''));
登入後複製

本地测试//ignore能忽略掉它不认识的字接着往下转,并且不报错,而//translit是截掉它不认识的字及其后面的内容,并且报错。//ignore是我需要的。

在网上找到下面这篇文章,发现mb_convert_encoding也可以,但效率比iconv差,转换字符串编码iconv与mb_convert_encoding的区别:

iconv — convert string to requested character encoding(php 4 >= 4.0.5, php 5)

mb_convert_encoding — convert character encoding(php 4 >= 4.0.6, php 5)

用法:

string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )

需要先启用 mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉

string iconv ( string in_charset, string out_charset, string str )

注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://translit 和 //ignore,其中://translit 会自动将不能直接转化的字符变成一个或多个近似的字符,//ignore 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。

returns the converted string or false on failure.

使用:

1. 发现iconv在转换字符"-"到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个"-"都无法转换成功,无法输出。另外mb_convert_encoding没有这个bug.

2. mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;如:$str = mb_convert_encoding($str,"euc-jp","ascii,jis,euc-jp,sjis,utf- 8");“ascii,jis,euc-jp,sjis,utf-8”的顺序不同效果也有差异

3. 一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数

from_encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. if it is not specified, the internal encoding will be used.

$str = mb_convert_encoding($str, "ucs-2le", "jis, eucjp-win, sjis-win"); 
$str = mb_convert_encoding($str, "euc-jp', "auto");
登入後複製


本文链接:

收藏随意^^请保留教程地址.

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

使用java的Character.isDefined()函數判斷字元是否為已定義字符 使用java的Character.isDefined()函數判斷字元是否為已定義字符 Jul 25, 2023 am 10:33 AM

使用Java的Character.isDefined()函數判斷字元是否為已定義字元在Java程式設計中,有時需要判斷一個字元是否為已定義的字元。為了方便,Java提供了Character類別的isDefined()函數,可以幫助我們快速判斷一個字元是否為已定義字元。本文將介紹這個函數的使用方法,並提供一些程式碼範例。 Character類別是Java中表示單一字元的

中文處理必備函數推薦:PHP iconv函數詳解 中文處理必備函數推薦:PHP iconv函數詳解 Jun 27, 2023 pm 02:04 PM

在進行文字處理過程中,對於不同編碼格式的字串進行轉換是常見的需求。而PHP語言中提供的iconv(InternationalizationConvertion)函數可以非常方便地滿足這項需求。本文將從以下幾個方面詳細介紹iconv函數的使用方法:iconv函數的定義和常見參數介紹實例演示:將GBK編碼的字串轉換為UTF-8編碼的字串實例演示:將UTF

Java文件解讀:Character類別的isAlphabetic()方法詳解 Java文件解讀:Character類別的isAlphabetic()方法詳解 Nov 04, 2023 am 10:05 AM

Java文件解讀:Character類別的isAlphabetic()方法詳解一、概述在Java的Character類別中,isAlphabetic()方法用於判斷給定字元是否為一個字母字元。它傳回一個布林值,true表示給定字符是一個字母字符,false表示給定字符不是一個字母字符。本篇文章將對這個方法的使用和原理進行詳細解析,並提供程式碼範例幫助讀者更好地理解

Java使用Character類別的isLetterOrDigit()函數判斷字元是否為字母或數字 Java使用Character類別的isLetterOrDigit()函數判斷字元是否為字母或數字 Jul 24, 2023 pm 02:45 PM

Java使用Character類別的isLetterOrDigit()函數來判斷字元是否為字母或數字在Java程式設計中,我們經常需要對字元進行一些操作和判斷。其中一個常見的需求是判斷一個字元是否是字母或數字。 Java提供了Character類別的isLetterOrDigit()函數來幫助我們實作這個功能。 Character類是一個包裝類,用於對字元進行操作和判斷。

使用java的Character.isLetterOrDigit()函數判斷字元是否為字母或數字 使用java的Character.isLetterOrDigit()函數判斷字元是否為字母或數字 Jul 25, 2023 pm 04:22 PM

使用Java的Character.isLetterOrDigit()函數判斷字元是否為字母或數字在Java中,我們經常需要判斷一個字元是否為字母或數字。為了簡化這個過程,Java提供了一個內建函數Character.isLetterOrDigit(),可以幫助我們快速完成這個判斷。 Character.isLetterOrDigit()函式接受一個字元作為參

CentOS下iconv命令的介紹 CentOS下iconv命令的介紹 Dec 29, 2023 pm 07:52 PM

iconv-fencoding[-tencoding][inputfile]...[功能]對於給定檔案把它的內容從一種編碼轉換成另一種編碼。 [描述]-fencoding:把字元從encoding編碼開始轉換。 -tencoding:把字元轉換到encoding編碼。 -l:列出已知的編碼字元集合-ofile:指定輸出檔案-c:忽略輸出的非法字元-s:禁止警告訊息,但不是錯誤訊息--verbose:顯示進度訊息-f和-t所能指定的合法字元在-l選項的命令裡面都列出來了。 [舉例]*列出目前支援的字元編碼

使用java的Character.isUpperCase()函數判斷字元是否為大寫字母 使用java的Character.isUpperCase()函數判斷字元是否為大寫字母 Jul 25, 2023 pm 11:45 PM

使用java的Character.isUpperCase()函數判斷字元是否為大寫字母在Java程式設計中,有時候我們需要判斷一個字元是否為大寫字母。幸運的是,Java提供了一個非常方便的方法來實現這個功能,那就是使用Character類別的isUpperCase()函數。本文將介紹如何使用這個函數進行判斷,並透過程式碼範例加以說明。首先,我們要先了解Chara

Java文件解讀:Character類別的isLowerCase()方法詳解 Java文件解讀:Character類別的isLowerCase()方法詳解 Nov 03, 2023 am 10:36 AM

Java文件解讀:Character類別的isLowerCase()方法詳解Java中的Character類別提供了許多方法來處理字元的操作,其中isLowerCase()方法用於判斷一個字元是否為小寫字母。這個方法的具體使用以及應用場景都將在本文中進行詳細解讀。一、isLowerCase()方法的功能與使用方法Character類別的isLowerCase()方

See all articles