Just a little fix for the utf8_to_windows1255 function above. The original function doesn't convert English characters well:
function utf8_to_windows1255($utf8) {
$windows1255 = "";
$chars = preg_split("//",$utf8);
for ($i=1; $i<count($chars)-1; $i++) {
$prefix = ord($chars[$i]);
$suffix = ord($chars[$i+1]);
//print ("<p>$prefix $suffix");
if ($prefix==215) {
$windows1255 .= chr($suffix+80);
$i++;
}
elseif ($prefix==214) {
$windows1255 .= chr($suffix+16);
$i++;
}
else {
$windows1255 .= $chars[$i];
}
}
return $windows1255;
}
LXI. iconv Functions
Úvod
This module contains an interface to iconv character set conversion facility. With this module, you can turn a string represented by a local character set into the one represented by another character set, which may be the Unicode character set. Supported character sets depend on the iconv implementation of your system. Note that the iconv function on some systems may not work as you expect. In such case, it'd be a good idea to install the » GNU libiconv library. It will most likely end up with more consistent results.
Since PHP 5.0.0, this extension comes with various utility functions that help you to write multilingual scripts. Let's have a look at the following sections to explore the new features.
Požadavky
You will need nothing if the system you are using is one of the recent POSIX-compliant systems because standard C libraries that are supplied in them must provide iconv facility. Otherwise, you have to get the » libiconv library installed in your system.
Instalace
To use functions provided by this module, the PHP binary must be built with the following configure line: --with-iconv[=DIR].
Note to Windows® Users: In order to enable this module on a Windows® environment, you need to put a DLL file named iconv.dll or iconv-1.3.dll (prior to 4.2.1) which is bundled with the PHP/Win32 binary package into a directory specified by the PATH environment variable or one of the system directories of your Windows® installation.
This module is part of PHP as of PHP 5 thus iconv.dll and php_iconv.dll is not needed anymore.
Konfigurace běhu
Chování těchto funkcí je ovlivněno nastavením parametrů v php.ini.
Tabulka 106. Iconv configuration options
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| iconv.input_encoding | "ISO-8859-1" | PHP_INI_ALL | Available since PHP 4.0.5. |
| iconv.output_encoding | "ISO-8859-1" | PHP_INI_ALL | Available since PHP 4.0.5. |
| iconv.internal_encoding | "ISO-8859-1" | PHP_INI_ALL | Available since PHP 4.0.5. |
Pro další detaily a definice konstant PHP_INI_*, viz dokumentace k ini_set().
Some systems (like IBM AIX) use "ISO8859-1" instead of "ISO-8859-1" so this value has to be used in configuration options and function parameters.
Poznámka: Configuration option iconv.input_encoding is currently not used for anything.
Typy prostředků
Toto rozšíření nemá definován žádný typ prostředku (resource).
Předdefinované konstanty
Since PHP 4.3.0 it is possible to identify at runtime which iconv implementation is adopted by this extension.
Poznámka: Writing implementation-dependent scripts with these constants is strongly discouraged.
Since PHP 5.0.0, the following constants are also available:
Tabulka 108. iconv constants available since PHP 5.0.0
| Name | Type | Description |
|---|---|---|
| ICONV_MIME_DECODE_STRICT | integer | A bitmask used for iconv_mime_decode() |
| ICONV_MIME_DECODE_CONTINUE_ON_ERROR | integer | A bitmask used for iconv_mime_decode() |
Viz také
See also GNU Recode functions.
Obsah
- iconv_get_encoding — Retrieve internal configuration variables of iconv extension
- iconv_mime_decode_headers — Decodes multiple MIME header fields at once
- iconv_mime_decode — Decodes a MIME header field
- iconv_mime_encode — Composes a MIME header field
- iconv_set_encoding — Set current setting for character encoding conversion
- iconv_strlen — Returns the character count of string
- iconv_strpos — Finds position of first occurrence of a needle within a haystack
- iconv_strrpos — Finds the last occurrence of a needle within a haystack
- iconv_substr — Cut out part of a string
- iconv — Convert string to requested character encoding
- ob_iconv_handler — Convert character encoding as output buffer handler
iconv Functions
25-Mar-2007 12:32
Note that my mysql_iconv will not translate correctly the Hebrew dotting symbols (Niqqud) - they will be converted into question marks.
Here is a straightforward (and not very efficient) solution:
function utf8_to_windows1255($utf8) {
$windows1255 = "";
$chars = preg_split("//",$utf8);
for ($i=1; $i<count($chars)-1; $i+=2) {
$prefix = ord($chars[$i]);
$suffix = ord($chars[$i+1]);
print ("<p>$prefix $suffix");
if ($prefix==215)
$windows1255 .= chr($suffix+80);
elseif ($prefix==214)
$windows1255 .= chr($suffix+16);
else
$windows1255 .= $chars[$i];
}
return $windows1255;
}
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;
}
?>
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";
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);
}
16-Mar-2006 04:22
There's one more special german character: ß (sometimes displayed as Ϋ)
so: case 159: $out .= "ß";break;
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);
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;
}
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;
}
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.
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.
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
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.
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()
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
