iconv does not convert to sjis tildes unless you do something like this
<?PHP
$string = 'where are the (~) (~) tildes?'; // This is what we start off with, you can put any string in here that contains problematic characters in utf8 format
echo ('this is what we start with = '.$string.'<BR />'); //print string at start
$conv_str = iconv('utf-8','shift-jis'.'//TRANSLIT',$string);
echo ('this is not working = '.$conv_str.'<BR />'); //Just to show that this is not working.
$rstring = preg_replace ('/~/','1bytetilde',$string); //replace before conversion
echo ('this is modified string here = '.$rstring.'<BR />'); //This is the modified string
$conv_str2 = iconv('utf-8','shift-jis'.'//TRANSLIT',$rstring); //convert modified string
$rereplace=chr(126); //$rereplace is now a one byte tilde in shift_jis
$rerstring = preg_replace ('/1bytetilde/',$rereplace,$conv_str2); //rereplace with tildes
echo ('this is the correct result = '.$rerstring.'<BR />'); //the correct result
?>
iconv 関数
参考
GNU Recode 関数も参照してください。
目次
- iconv_get_encoding — iconv 拡張モジュールの内部設定変数を取得する
- iconv_mime_decode_headers — 複数の MIME ヘッダフィールドを一度にデコードする
- iconv_mime_decode — MIME ヘッダフィールドをデコードする
- iconv_mime_encode — MIME ヘッダフィールドを作成する
- iconv_set_encoding — 文字エンコーディング変換用の設定を行なう
- iconv_strlen — 文字列の文字数を返す
- iconv_strpos — 文字列が最初に現れる場所を見つける
- iconv_strrpos — 文字列が最後に現れる場所を見つける
- iconv_substr — 文字列の一部を切り出す
- iconv — 文字列を指定した文字エンコーディングに変換する
- ob_iconv_handler — 出力バッファハンドラとして文字エンコーディングを変換する
iconv 関数
nospam at nihonbunka dot com
16-May-2008 04:40
16-May-2008 04:40
Erel Segal - Rent a Brain
25-Mar-2007 08:32
25-Mar-2007 08: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:
<?php
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;
}
?>
Fabian Ketchup
13-Sep-2006 02:00
13-Sep-2006 02: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 03:17
17-Jul-2006 03: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 12:22
16-Mar-2006 12:22
There's one more special german character: ß (sometimes displayed as Ϋ)
so: case 159: $out .= "ß";break;
08-Nov-2005 08: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 10:09
27-Sep-2005 10: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 01:36
15-Dec-2004 01: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 09:40
19-Aug-2004 09: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 10:26
23-Dec-2003 10: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.
14-Sep-2002 01: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
25-Jul-2002 04:39
25-Jul-2002 04: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
