Maison >développement back-end >tutoriel php >Comment utiliser la fonction iconv en php

Comment utiliser la fonction iconv en php

不言
不言original
2018-04-09 13:45:152523parcourir

Le contenu de cet article présente comment utiliser la fonction iconv en php. Je le partagerai avec vous ici. Les amis dans le besoin peuvent s'y référer

Je travaille actuellement sur un programme et j'ai besoin de l'utiliser. la fonction iconv. Convertissez la page codée en utf-8 capturée en gb2312. J'ai découvert que si j'utilise la fonction iconv pour transcoder les données capturées, les données seront moindres sans raison.

La bibliothèque de fonctions iconv peut effectuer la conversion entre différents jeux de caractères et constitue une bibliothèque de fonctions de base indispensable dans la programmation PHP.
1. Téléchargez la bibliothèque de fonctions libiconv http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.2.tar.gz
2. Décompressez tar -zxvf libiconv-1.9.2. .tar.gz;
3. Installez libiconv
#configure --prefix=/usr/local/iconv
#make
#make install
4. -with-iconv=/usr/local/iconv

sous Windows

Je travaille actuellement sur un programme de voleur et j'ai besoin d'utiliser la fonction iconv pour capturer l'utf -8 pages encodées ont été converties en gb2312, et j'ai découvert que si j'utilisais la fonction iconv pour transcoder les données capturées, les données seraient moindres sans raison. Cela m'a déprimé pendant un moment. Après avoir vérifié les informations sur Internet, j'ai découvert qu'il s'agissait d'un bug dans la fonction iconv. iconv fera une erreur lors de la conversion du caractère "-" en gb2312
La solution est très simple, c'est-à-dire ajouter "//IGNORE" après l'encodage qui doit être converti, qui est le deuxième paramètre de la fonction iconv . Comme suit :

Ce qui suit est le contenu cité :

Copier le code Le code est le suivant :

iconv("UTF-8","GB2312//IGNORE",$data)


ignorer signifie ignorer les erreurs lors de la conversion. Sans le paramètre ignore, toutes les chaînes suivant ce caractère ne peuvent pas être enregistrées.

Copier le code Le code est le suivant :

<?php 
echo $str= &#39;你好,这里是卖咖啡!&#39;; 
echo &#39;<br />&#39;; 
echo iconv(&#39;GB2312&#39;, &#39;UTF-8&#39;, $str); //将字符串的编码从GB2312转到UTF-8 
echo &#39;<br />&#39;; 
echo iconv_substr($str, 1, 1, &#39;UTF-8&#39;); //按字符个数截取而非字节 
print_r(iconv_get_encoding()); //得到当前页面编码信息 
echo iconv_strlen($str, &#39;UTF-8&#39;); //得到设定编码的字符串长度 
//也有这样用的 
$content = iconv("UTF-8","gbk//TRANSLIT",$content); 
?>

iconv n'est pas la fonction par défaut de php, et c'est aussi un module installé par défaut . Il doit être installé avant de pouvoir être utilisé.
S'il s'agit de Windows2000+php, vous pouvez modifier le fichier php.ini et supprimer le ";" avant extension=php_iconv.dll. En même temps, vous devez copier le fichier iconv.dll dans votre fichier d'installation php d'origine. vers votre winnt/ Sous system32 (si votre dll pointe vers ce répertoire)
Dans l'environnement Linux, utilisez l'installation statique et ajoutez un élément supplémentaire --with-iconv lorsque configure phpinfo peut voir l'élément iconv. (Linux7.3+Apache4.06+php4.3.2),

Téléchargement : ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.8.tar.gz
Installation :
#cp libiconv-1.8.tar.gz /usr/local/src
#tar zxvf lib*
#./configure --prefix=/usr/local/libiconv
#make
#make install
Compilez php
#./configure --prefix=/usr/local/php4.3.2 --with-iconv=/usr/local/libiconv/
Facile à utiliser Exemple :

<?php 
echo iconv("gb2312","ISO-8859-1","我们"); 
?>

Présentation des fonctions mb_convert_encoding et iconv en PHP

La fonction mb_convert_encoding est utilisée pour convertir les encodages. Avant, je ne comprenais pas le concept de codage de programme, mais maintenant il me semble comprendre un peu.
Cependant, l'anglais n'a généralement pas de problèmes d'encodage, seules les données chinoises auront ce problème. Par exemple, lorsque vous utilisez Zend Studio ou Editplus pour écrire un programme, vous utilisez le codage gbk. Si les données doivent être saisies dans la base de données et que le codage de la base de données est utf8, alors les données doivent être codées et converties, sinon elles le seront. devenir tronqué lors de l'entrée dans la base de données.

Voir l'utilisation officielle de mb_convert_encoding :
http://cn.php.net/manual/zh/function.mb-convert-encoding.php

Créer un GBK en UTF - 8

< ?php 
header("content-Type: text/html; charset=Utf-8"); 
echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK"); 
?>


Un autre GB2312 vers Big5

< ?php 
header("content-Type: text/html; charset=big5"); 
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); 
?>

Mais pour utiliser la fonction ci-dessus, vous devez l'installer mais vous devez l'activer la bibliothèque d'extension mbstring en premier.

Une autre fonction iconv en PHP est également utilisée pour convertir l'encodage de chaîne, et sa fonction est similaire à la fonction ci-dessus.

Il y a quelques exemples détaillés ci-dessous :

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] )
需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;


string iconv ( string in_charset, string out_charset, string str )
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
Returns the converted string or FALSE on failure.


使用:

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

一般情况下用 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.
/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
$str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”);
/* “auto” is expanded to “ASCII,JIS,UTF-8,EUC-JP,SJIS” */
$str = mb_convert_encoding($str, “EUC-JP”, “auto”);

例子:

$content = iconv(”GBK”, “UTF-8″, $content); 
$content = mb_convert_encoding($content, "UTF-8″,"GBK");

php中使用iconv函数时容易忽略的参数
今天在处理抓取内容的时候,当采用iconv进行编码转换的时候,发现结果会中断,猜是字符集的问题,考虑怎么跳过目标字符集不存在的字符,查手册发现iconv的函数只有三个参数,好像不行,然后查网上有人说可以,但是很奇怪怎么实现,最后发现英文描述有说可以加标识到目标编码后面:“TRANSLIT”,很郁闷怎么加呢?原来是先加“//”,真是郁闷,竟然有这样的设计
原型: $txtContent = iconv("utf-8",'GBK',$txtContent);

特殊参数:iconv("UTF-8","GB2312//IGNORE",$data)


两个可选的辅助参数:TRANSLIT和IGNORE ,(其中IGNORE 就是说遇到无法转换的就跳过)。 Description

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

Performs a character set conversion on the string str from in_charset to out_charset. Returns the converted string or FALSE on failure.

If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can't be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.

相关推荐:

php 通过iconv将字符串从GBK转换为UTF8字符集的方法

PHPiconv函数

php 获得英文和中文混合的字数iconv_strlen

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn