Iso-88591 ve geri PHP için utf8-karakterleri dönüştürmek

6 Cevap php

Benim komut dosyası bazı farklı kodlama kullanıyor, ve ben bunları birleştirmek çalıştığınızda, bu bir sorun becom vardır.

Ama onun yerine ben komut A sonucu encodig değiştirmek istiyorsanız, kullandıkları kodlamasını değiştirmek ve senaryo B'de parametre olarak kullanamazsınız

Yani: PHP ISO-88591 UTF-8 bir dize değiştirmek için herhangi bir basit bir yolu var mı? Ben utf_encode ve _decode baktım, ama ben istediklerini yapmaz. Neden herhangi bir "utf2iso ()" fonksiyonu, ya da benzeri bir exsist değil mi?

Ben ISO formatında yazılmış olamaz karakterler sanmıyorum, böylece bir büyük bir sorun olmamalı.

6 Cevap

Have a look at iconv() or mb_convert_encoding(). Just by the way: why don't utf8_encode() and utf8_decode() work for you?

utf8_decode — Converts a string with ISO-8859-1 characters encoded with UTF-8 to single-byte ISO-8859-1

utf8_encode — Encodes an ISO-8859-1 string to UTF-8

Yani aslında

$utf8 = 'ÄÖÜ'; // file must be UTF-8 encoded
$iso88591_1 = utf8_decode($utf8);
$iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $utf8);
$iso88591_2 = mb_convert_encoding($utf8, 'ISO-8859-1', 'UTF-8');

$iso88591 = 'ÄÖÜ'; // file must be ISO-8859-1 encoded
$utf8_1 = utf8_encode($iso88591);
$utf8_2 = iconv('ISO-8859-1', 'UTF-8', $iso88591);
$utf8_2 = mb_convert_encoding($iso88591, 'UTF-8', 'ISO-8859-1');

hepsi aynı yapmalıyım - utf8_en/decode() hiçbir özel uzantısı, mb_convert_encoding() gerektiren ext / mbstring ve iconv() gerektiren ext / iconv gerektiren.

Her şeyden önce, farklı kodlamalar kullanmayın. Bu bir karmaşa yol açar, ve UTF-8 kesinlikle her yerde kullanıyor olmalıdır biridir.

Şansını giriş ISO-8859-1 değil, ama başka bir şey (ISO-8859-15, Windows-1252). , Bu dönüştürmek kullanmak için iconv.

Bununla birlikte, utf8_encode ve utf8_decode, ISO-8859-1 için çalışması gerekir. Eğer bir dosyaya bir bağlantı veya dönüşüm beklenmeyen sonuçlar başarısız ya da getirilerin hangi bir uuencoded veya base64 örnek dize sonrası olabilir eğer güzel olurdu.

Sen iconv paketi, özellikle onun iconv işlevini kullanmanız gerekir.

Ben kullanılan:

function utf8_to_html ($data) {
return preg_replace(
	array (
		'/ä/',
		'/ö/',
		'/ü/',
		'/é/',
		'/à/',
		'/è/'
	),
	array (
		'ä',
		'ö',
		'ü',
		'é',
		'à',
		'è'
	),
	$data );

}

Ben bu işlevi kullanın:

function formatcell($data, $num, $fill=" ") {
$data = trim($data);
$data=str_replace(chr(13),' ',$data);
$data=str_replace(chr(10),' ',$data);
// translate UTF8 to English characters
$data = iconv('UTF-8', 'ASCII//TRANSLIT', $data);
$data = preg_replace("/[\'\"\^\~\`]/i", '', $data);


// fill it up with spaces
for ($i = strlen($data); $i < $num; $i++) {
    $data .= $fill;
}
// limit string to num characters
$data = substr($data, 0, $num);

return $data;

}

echo formatcell("YES UTF8 String Zürich", 25, 'x'); //YES UTF8 String Zürichxxx
echo formatcell("NON UTF8 String Zurich", 25, 'x'); //NON UTF8 String Zurichxxx

Check out my function in my blog http://www.unexpectedit.com/php/php-handling-non-english-characters-utf8

Nacho

gibi kafa meta etiketi ayarlayabilirsiniz

 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

İstediğiniz sembolleri karakteri değiştirmek için linki http://www.i18nqa.com/debug/utf8-debug.html kullanın.

sonra gibi str_replace kullanabilirsiniz

    $find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
                        $replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);

Onun i kullanma yöntem ve yardım çok. Teşekkürler!