Laravel Live Denmark 2026

utf8_encode

(PHP 4, PHP 5, PHP 7, PHP 8)

utf8_encodeISO-8859-1 dizgeyi UTF-8'e dönüştürür

Uyarı

Bu işlevin kullanımı PHP 8.2.0 itibariyle ÖNERİLMEMEKTEDİR. Bu işleve kesinlikle güvenilmemelidir.

Açıklama

utf8_encode(string $dizge): string

Belirtilen ISO-8859-1 dizgeyi UTF-8'e dönüştürür.

Bilginize:

Bu işlev, belirtilen dizgenin geçerli kodlamasını tahmin etmeye çalışmaz, bunun ISO-8859-1 ("Latin 1" olarak da bilinir) olarak kodlandığını varsayar ve UTF-8'e dönüştürür. Her bayt dizisi geçerli bir ISO-8859-1 dizesi olduğundan, bu hiçbir zaman bir hataya yol açmaz, ancak farklı bir kodlama istendiğinde yararlı bir dizgeyle sonuçlanmaz.

ISO-8859-1 karakter kodlamasını kullanıyor olarak imlenmiş birçok sayfa aslında benzeri olan Windows-1252 kodlamasını kullanır ve tarayıcılar ISO-8859-1 kodlu sayfaları Windows-1252 olarak yorumlar. Windows-1252, belirli ISO-8859-1 kontrol karakterleri yerine Euro imi () ve kıvrımlı tırnaklar ( ) gibi ek yazdırılabilir karakterlere sahiptir. Bu işlev, bu tür Windows-1252 karakterlerini doğru şekilde dönüştürmeyecektir. Windows-1252 dönüştürme gerekiyorsa farklı bir işlev kullanılmalıdır.

Bağımsız Değişkenler

dizge

ISO-8859-1 ile kodlanmış bir dizge.

Dönen Değerler

Belirtilen dizge dizgesinin UTF-8 gösterimini döndürür.

Örnekler

Örnek 1 - Temel örnek

<?php
// 'Zoë' dizgesini ISO 8859-1'den UTF-8'e dönüştürür
$iso8859_1_string = "\x5A\x6F\xEB";
$utf8_string = utf8_encode($iso8859_1_string);
echo
bin2hex($utf8_string), "\n";
?>

Yukarıdaki örneğin çıktısı:

5a6fc3ab

Sürüm Bilgisi

Sürüm: Açıklama
8.2.0 Bu işlevin kullanımı artık önerilmiyor.
7.2.0 Bu işlev XML eklentisinden PHP çekirdeğine taşınmıştır. Önceki sürümlerde sadece XML eklentisi kurulduğunda kullanılabiliyordu.

Notlar

Bilginize: Kullanımdan kaldırma ve seçenekler

Bu işlevin PHP 8.2.0 ve sonrasında kullanımı önerilmiyor ve gelecek sürüede kullanımdan kaldırılacaktır. Mevcut kullanımlar gözden geçirilmeli ve uygun seçeneklerle değiştirilmelidir.

Benzer işlevsellik, ISO-8859-1 ve diğer birçok karakter kodlamasını destekleyen mb_convert_encoding() ile elde edilebilir.

<?php
$iso8859_1_string
= "\xEB"; // ISO-8859-1 'ë' (iki noktalı e)
$utf8_string = mb_convert_encoding($iso8859_1_string, 'UTF-8', 'ISO-8859-1');
echo
bin2hex($utf8_string), "\n";

$iso8859_7_string = "\xEB"; // ISO-8859-7'de aynı dizge: 'λ' (Yunanca küçük harfli lambda)
$utf8_string = mb_convert_encoding($iso8859_7_string, 'UTF-8', 'ISO-8859-7');
echo
bin2hex($utf8_string), "\n";

$windows_1252_string = "\x80"; // '€' (Euro imi) Windows-1252'de var, ISO-8859-1'de yok
$utf8_string = mb_convert_encoding($windows_1252_string, 'UTF-8', 'Windows-1252');
echo
bin2hex($utf8_string), "\n";
?>

Yukarıdaki örneğin çıktısı:

c3ab
cebb
e282ac

Kurulu eklentilere bağlı olarak mevcut olabilecek diğer seçenekler şunlardır: UConverter::transcode() ve iconv().

Aşağıdakilerin tümü aynı sonucu verir:

<?php
$iso8859_1_string
= "\x5A\x6F\xEB"; // ISO-8859-1 'Zoë'

$utf8_string = utf8_encode($iso8859_1_string);
echo
bin2hex($utf8_string), "\n";

$utf8_string = mb_convert_encoding($iso8859_1_string, 'UTF-8', 'ISO-8859-1');
echo
bin2hex($utf8_string), "\n";

$utf8_string = UConverter::transcode($iso8859_1_string, 'UTF8', 'ISO-8859-1');
echo
bin2hex($utf8_string), "\n";

$utf8_string = iconv('ISO-8859-1', 'UTF-8', $iso8859_1_string);
echo
bin2hex($utf8_string), "\n";
?>

Yukarıdaki örneğin çıktısı:

5a6fc3ab
5a6fc3ab
5a6fc3ab
5a6fc3ab

Ayrıca Bakınız

add a note

User Contributed Notes 3 notes

up
139
deceze at gmail dot com
14 years ago
Please note that utf8_encode only converts a string encoded in ISO-8859-1 to UTF-8. A more appropriate name for it would be "iso88591_to_utf8". If your text is not encoded in  ISO-8859-1, you do not need this function. If your text is already in UTF-8, you do not need this function. In fact, applying this function to text that is not encoded in ISO-8859-1 will most likely simply garble that text.

If you need to convert text from any encoding to any other encoding, look at iconv() instead.
up
12
Aidan Kehoe <php-manual at parhasard dot net>
21 years ago
Here's some code that addresses the issue that Steven describes in the previous comment; 

<?php

/* This structure encodes the difference between ISO-8859-1 and Windows-1252,
   as a map from the UTF-8 encoding of some ISO-8859-1 control characters to
   the UTF-8 encoding of the non-control characters that Windows-1252 places
   at the equivalent code points. */

$cp1252_map = array(
    "\xc2\x80" => "\xe2\x82\xac", /* EURO SIGN */
    "\xc2\x82" => "\xe2\x80\x9a", /* SINGLE LOW-9 QUOTATION MARK */
    "\xc2\x83" => "\xc6\x92",     /* LATIN SMALL LETTER F WITH HOOK */
    "\xc2\x84" => "\xe2\x80\x9e", /* DOUBLE LOW-9 QUOTATION MARK */
    "\xc2\x85" => "\xe2\x80\xa6", /* HORIZONTAL ELLIPSIS */
    "\xc2\x86" => "\xe2\x80\xa0", /* DAGGER */
    "\xc2\x87" => "\xe2\x80\xa1", /* DOUBLE DAGGER */
    "\xc2\x88" => "\xcb\x86",     /* MODIFIER LETTER CIRCUMFLEX ACCENT */
    "\xc2\x89" => "\xe2\x80\xb0", /* PER MILLE SIGN */
    "\xc2\x8a" => "\xc5\xa0",     /* LATIN CAPITAL LETTER S WITH CARON */
    "\xc2\x8b" => "\xe2\x80\xb9", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
    "\xc2\x8c" => "\xc5\x92",     /* LATIN CAPITAL LIGATURE OE */
    "\xc2\x8e" => "\xc5\xbd",     /* LATIN CAPITAL LETTER Z WITH CARON */
    "\xc2\x91" => "\xe2\x80\x98", /* LEFT SINGLE QUOTATION MARK */
    "\xc2\x92" => "\xe2\x80\x99", /* RIGHT SINGLE QUOTATION MARK */
    "\xc2\x93" => "\xe2\x80\x9c", /* LEFT DOUBLE QUOTATION MARK */
    "\xc2\x94" => "\xe2\x80\x9d", /* RIGHT DOUBLE QUOTATION MARK */
    "\xc2\x95" => "\xe2\x80\xa2", /* BULLET */
    "\xc2\x96" => "\xe2\x80\x93", /* EN DASH */
    "\xc2\x97" => "\xe2\x80\x94", /* EM DASH */

    "\xc2\x98" => "\xcb\x9c",     /* SMALL TILDE */
    "\xc2\x99" => "\xe2\x84\xa2", /* TRADE MARK SIGN */
    "\xc2\x9a" => "\xc5\xa1",     /* LATIN SMALL LETTER S WITH CARON */
    "\xc2\x9b" => "\xe2\x80\xba", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
    "\xc2\x9c" => "\xc5\x93",     /* LATIN SMALL LIGATURE OE */
    "\xc2\x9e" => "\xc5\xbe",     /* LATIN SMALL LETTER Z WITH CARON */
    "\xc2\x9f" => "\xc5\xb8"      /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
);

function cp1252_to_utf8($str) {
        global $cp1252_map; 
        return  strtr(utf8_encode($str), $cp1252_map);
}

?>
up
0
Mark AT modernbill DOT com
21 years ago
If you haven't guessed already: If the UTF-8 character has no representation in the ISO-8859-1 codepage, a ? will be returned. You might want to wrap a function around this to make sure you aren't saving a bunch of ???? into your database.
To Top