PHP: Функции iconv - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

iconv_get_encoding icap_store_event

Last updated: Fri, 26 Jan 2007

view this page in

# LX. Функции iconv

# Введение

Это расширение предоставляет интерфейс к библиотеке преобразования кодировок iconv. Набор поддерживаемых кодировок зависит от реализации iconv в вашей системе. На некоторых платформах iconv может работать ненормально, в таких случаях рекомендуется установить библиотеку GNU libiconv.

Начиная с PHP 5.0.0, это в расширение добавлены некоторые вспомогательные функции, помогающие при написании сценариев, работающих с несколькими языками.

# Требования

Операционные системы, отвечающие стандартам POSIX, поставляются с C-библиотеками, предоставляющими функциональность iconv. Иначе, вам придётся установить библиотеку libiconv от GNU.

# Установка

Чтобы расширение было доступно, нужно указать ключ `--with-iconv[=DIR]` при запуске сценария конфигурирования.

> Примечание для пользователей Windows®: Чтобы расширение было доступно, поместите библиотеку с именем iconv.dll или iconv-1.3.dll (для версий до 4.2.1), которая входит в поставку PHP для Windows®, в одну из её системных папок.

> Этот модуль является частью PHP начиная с версии 5, так что библиотеки iconv.dll и php_iconv.dll более не нужны.

# Настройка во время выполнения

Поведение этих функций зависит от установок в `php.ini`.

Таблица 1. Конфигурационные параметры, касающиеся Iconv

Параметр | Значение по умолчанию | Переменная окружения
--- | --- | ---
iconv.input_encoding | ICONV_INPUT_ENCODING | PHP_INI_ALL
iconv.output_encoding | ICONV_OUTPUT_ENCODING | PHP_INI_ALL
iconv.internal_encoding | ICONV_INTERNAL_ENCODING | PHP_INI_ALL

Для подробностей о константах PHP_INI_* см. ini_set().

> Замечание: На данный момент `iconv.input_encoding` никак не используется.

# Типы ресурсов

Данное расширение не определяет никакие типы ресурсов.

# Предопределенные константы

Начиная с PHP 4.3.0 возможно узнать во время выполнения, какая реализация `iconv` используется расширением.

Таблица 2. Константы `iconv`

Имя | Тип | Описание
--- | --- | ---
ICONV_IMPL | string | Реализация
ICONV_VERSION | string | Версия реализации

> Замечание: Используйте эти константы для написания сценариев, независимых от реализации.

Начиная с PHP 5.0.0, доступны также следующие константы:

Таблица 3. константы `iconv`, доступные начиная с PHP 5.0.0

Имя | Тип | Описание
--- | --- | ---
ICONV_MIME_DECODE_STRICT | integer | Битовая маска, используемая для iconv_mime_decode()
ICONV_MIME_DECODE_CONTINUE_ON_ERROR | integer | Битовая маска, используемая для iconv_mime_decode()

# Смотрите также

См. также Функции GNU Recode.

add a note User Contributed Notes
Функции iconv
Erel Segal - Rent a Brain
09-Dec-2006 03:05
`If you don't have iconv, you can use MySQL to do the conversion.
Note that to do this you have to use MySQL's charset names, which are different than iconv names (e.g. "utf8" instead of "utf-8").
<?php
/**
* @param $string
* @param $from [string] The name of the current character set of $string, in MySQL format (e.g. "utf8", "hebrew").
* @param $to [string] The name of the character set to which you want to convert $string.
* @author Erel Segal - Rent a Brain (http://tora.us.fm/rentabrain)
* @date 2006-12-10
*/
function mysql_iconv($string, $from, $to) {
// keep current character set values:
$character_set_database = mysql_result(mysql_query("SELECT @@character_set_client"),0,0);
$character_set_results = mysql_result(mysql_query("SELECT @@character_set_results"),0,0);
mysql_query("SET character_set_client=$from");
mysql_query("SET character_set_results=$to");
$string_escaped = mysql_real_escape_string($string);
$converted_string = mysql_result(mysql_query("SELECT '$string_escaped'"),0,0);
// restore previous character set values:
mysql_query("SET character_set_client=$character_set_database");
mysql_query("SET character_set_results=$character_set_results");
return $converted_string;
}
?>`
Fabian Ketchup
13-Sep-2006 06:00
`// Simple file translation.
$FileToconvert = "menu.xml";
$FileConverted = "menu2.xml";
echo "Converting $FileToconvert ...";
file_put_contents($FileConverted, iconv("ISO-8859-1","UTF-8",file_get_contents($FileToconvert)));
echo "File converted in $FileConverted";`
nod at mobi dot kz
17-Jul-2006 07:17
`If you need convert string from Windows-1251 to 866. Some characters of 1251 haven't representation on DOS 866. For example, long dash -- chr(150) will be converted to 0, after that iconv finish his work and other charactes will be skiped. Problem characters range in win1251 (128-159,163,165-167,169,171-174,177-182,187-190).
Use this:
//$text - input text in windows-1251
//$cout - output text in 866 (cp866, dos ru ascii)
for($i=0;$i<strlen($text);$i++) {
$ord=ord($text[$i]);
if($ord>=192&&$ord<=239) $cout.=chr($ord-64);
elseif($ord>=240&&$ord<=255) $cout.=chr($ord-16);
elseif($ord==168) $cout.=chr(240);
elseif($ord==184) $cout.=chr(241);
elseif($ord==185) $cout.=chr(252);
elseif($ord==150||$ord==151) $cout.=chr(45);
elseif($ord==147||$ord==148||$ord==171||$ord==187) $cout.=chr(34);
elseif($ord>=128&&$ord<=190) $i=$i; //нет представления данному символу
else $cout.=chr($ord);
}`
andrej009
16-Mar-2006 04:22
`There's one more special german character: ß (sometimes displayed as Ϋ)
so: case 159: $out .= "ß";break;`
08-Nov-2005 12:05
`But this is a very slow method to convert this:
// function to change german umlauts into ue, oe, etc.
function cv_input($str){
Better try this:
$tr = array(chr(xyz) => '�', chr(160) => ' '); // Just a simple example, put all your characters in there
$string = strtr($string, $tr);`
Christophe Lienert
27-Sep-2005 02:09
`In addition to Godfather's note below, you may find this function useful just as well.
// function to change german umlauts into ue, oe, etc.
function cv_input($str){
$out = "";
for ($i = 0; $i<strlen($str);$i++){
$ch= ord($str{$i});
switch($ch){
case 195: $out .= "";break;
case 164: $out .= "ae"; break;
case 188: $out .= "ue"; break;
case 182: $out .= "oe"; break;
case 132: $out .= "Ae"; break;
case 156: $out .= "Ue"; break;
case 150: $out .= "Oe"; break;
default : $out .= chr($ch) ;
}
}
return $out;
}`
The Godfather
15-Dec-2004 05:36
`With this function you can translate the german Symbols from the character set UTF-8 in windows-1252.
function convert_text($str){
$out = '';
for ($i = 0; $i<strlen($str);$i++){
$ch = ord($str{$i});
switch($ch){
case 252: $out .= chr(129);break; //u Umlaut
case 220: $out .= chr(154);break;//U Umlaut
case 228: $out .= chr(132);break;//a Umlaut
case 196: $out .= chr(142);break;//A Umlaut
case 214: $out .= chr(153);break;//O Umlaut
case 246: $out .= chr(148);break;//o Umlaug
case 223: $out .= chr(225);break;//SZ
default : $out .= chr($ch) ;
}
}
return $out;
}`
tokiee at hotmail dot com
19-Aug-2004 01:40
`iconv now has been built-in, at least in PHP >= 5.0.1 for win32. You don't have to modify php.ini for this. Actually you should not. And clearly, libiconv does not need to be installed.`
thierry.bo
23-Dec-2003 02:26
`Windows users.
Personaly I leaved all php dlls in \php\dlls\ directory, just adding this path to my system path, and iconv.dll supplied with php 4.3.2 works fine, also leaving supplied php_iconv.dll in my \php\extensions\ directory. This was working fine with Apache and Omnihttpd server I use.
As soon I installed IIS on the same server, php complained about not finding php_iconv.dll in the extensions directory. In fact PHP with IIS loads all extensions in my \php\extensions directory correctly, except php_iconv.dll.
Although iconv.dll is in my system path, the only way to load php_iconv.dll was to copy iconv.dll file in \%winnt\system32 directory. With other servers, iconv.dll can be in anywhere in the system path.`
ALecFFer
06-Nov-2003 04:10
`To windows users:
Download here iconv version 1.9.1:
http://www.zlatkovic.com/pub/libxml/iconv-1.9.1.win32.zip`
13-Sep-2002 05:23
`I'm not sure how recent version of
glibc 2.x Slackware 7.x/8.x comes with, but
it's very likely that it comes with glibc 2.2.x.
In that case, you don't have to bother at all to
install libiconv in /usr/local. iconv(3) in glibc 2.2.x
is very good (thanks to Ulrich Drepper and
Bruno Haible. the latter is the author of libiconv).
libiconv is very handy for those outdated/non-standard-compliant Unix
and non-Unix systems that don't have
sufficiently good iconv(3) in their C library.`
elk at NOSPAMmodel-fx dot com
26-Jul-2002 09:07
`If you use the libiconv library instead of the libc's iconv support, don't forget to use libiconv() instead of iconv()`
elk at NOSPAMmodel-fx dot com
25-Jul-2002 08:39
`To compile libiconv under Slackware 7.0 or 8.0 without errors (either with the apache module of PHP or the CGI version), you must specify the full path of the libiconv installation.
Exemple :
--with-iconv=/usr/local`
add a note
iconv_get_encoding icap_store_event

Last updated: Fri, 26 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 10:36:09 2007 PST