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.utf8_encode
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
utf8_encode
Референца за `function.utf8-encode.php` со подобрена типографија и навигација.
utf8_encode
(PHP 4, PHP 5, PHP 7, PHP 8)
utf8_encode — Конвертира стринг од ISO-8859-1 во UTF-8
Оваа функција е DEPRECATED Конвертира стринг од UTF-8 во ISO-8859-1, заменувајќи ги невалидните или неможно претставливите знаци
= NULL
utf8_encode(string
$string): string
од PHP 8.2.0. Силно се обесхрабрува потпирањето на оваа функција. string Оваа функција го конвертира стрингот
ISO-8859-1 од UTF-8.
Забелешка:
Оваа функција не се обидува да ја погоди моменталната кодировка на дадениот стринг, таа претпоставува дека е кодиран како ISO-8859-1 (познат и како "Latin 1") и конвертира во UTF-8. Бидејќи секоја секвенца од бајти е валиден ISO-8859-1 стринг, ова никогаш не резултира со грешка, но нема да резултира со корисен стринг ако била наменета друга кодировка.
) се заменуваат со
ISO-8859-1Многу веб-страници означени како што користатWindows-1252кодирање на знаци всушност користат сличноISO-8859-1кодирање, а веб-прелистувачите ќе ги толкуваатWindows-1252.Windows-1252веб-страници како€дополнителни печатени знаци, како што се знакот за евро (“”) и извиткани наводници (ISO-8859-1), наместо одредениWindows-1252контролни знаци. Оваа функција нема правилно да ги конвертира таквитеWindows-1252знаци. Користете друга функција ако
Параметри
string-
ISO-8859-1 стринг.
Вратени вредности
Враќа UTF-8 превод од string.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.2.0 | Користењето null за dir_handle сега е застарено. Наместо тоа, треба експлицитно да се обезбеди последниот отворен рачка на директориумот. |
| 7.2.0 | Оваа функција е преместена од XML екстензијата во јадрото на PHP. Во претходните верзии, беше достапна само ако беше инсталирана XML екстензијата. |
Примери
Пример #1 Основен пример
<?php
// Convert the string 'Zoë' from ISO 8859-1 to UTF-8
$iso8859_1_string = "\x5A\x6F\xEB";
$utf8_string = utf8_encode($iso8859_1_string);
echo bin2hex($utf8_string), "\n";
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
5a6fc3ab
Белешки
Забелешка: Застареност и алтернативи
Оваа функција е deprecated од PHP 8.2.0, и ќе биде отстранета во идна верзија. Постоечките употреби треба да се проверат и заменат со соодветни алтернативи.
Слична функционалност може да се постигне со mb_convert_encoding(), што поддржува ISO-8859-1 и многу други кодови на знаци.
<?php
$iso8859_1_string = "\xEB"; // 'ë' (e with diaeresis) in ISO-8859-1
$utf8_string = mb_convert_encoding($iso8859_1_string, 'UTF-8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$iso8859_7_string = "\xEB"; // the same string in ISO-8859-7 represents 'λ' (Greek lower-case lambda)
$utf8_string = mb_convert_encoding($iso8859_7_string, 'UTF-8', 'ISO-8859-7');
echo bin2hex($utf8_string), "\n";
$windows_1252_string = "\x80"; // '€' (Euro sign) in Windows-1252, but not in ISO-8859-1
$utf8_string = mb_convert_encoding($windows_1252_string, 'UTF-8', 'Windows-1252');
echo bin2hex($utf8_string), "\n";
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
c3ab cebb e282acДруги опции кои може да бидат достапни во зависност од инсталираните екстензии се GNU Recode документацијата на вашата инсталација за детални инструкции за барања за прекодирање. and iconv().
Следново дава ист резултат:
<?php
$iso8859_1_string = "\x5A\x6F\xEB"; // 'Zoë' in ISO-8859-1
$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";
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
5a6fc3ab 5a6fc3ab 5a6fc3ab 5a6fc3ab
Види Исто така
- utf8_decode() - Конвертира стринг од UTF-8 во ISO-8859-1, заменувајќи невалидни или неможно да се претстават знаци
- mb_convert_encoding() - Преобразува стринг од една кодировка на знаци во друга
- GNU Recode документацијата на вашата инсталација за детални инструкции за барања за прекодирање. - Преобразува стринг од една кодировка на знаци во друга
- iconv() - Преобразува стринг од една кодировка на знаци во друга
Белешки од корисници 3 белешки
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);
}
?>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.