mb_detect_encoding

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

mb_detect_encodingKarakter kodlamasını algılar

Açıklama

mb_detect_encoding(string$dizge, array|string|null$kodlamalar = null, bool$katı = false): string|false

Sıralı adaylar listesinden string türündeki dizge için en uygun karakter kodlamasını saptar.

Amaçlanan karakter kodlamasının otomatik tespiti hiçbir zaman tamamen güvenilir olamaz; bazı ek bilgiler olmadan, şifrelenmiş bir dizenin şifresini anahtarsız çözmeye benzer. Verilerle birlikte depolanan veya iletilen karakter kodlamasının bir "Content-Type" HTTP başlığı gibi bir göstergesinin kullanılması her zaman tercih edilir.

Bu işlev, tüm bayt dizilerinin geçerli bir dizge oluşturmadığı çok baytlı kodlamalarda çok yararlıdır. Belirtilen dizge böyle bir dizi içeriyorsa, bu kodlama reddedilecek ve sonraki kodlamaya bakılacaktır.

Bağımsız Değişkenler

dizge

Kodlaması algılanacak dizge.

kodlamalar

kodlamalar ile denenecek karakter kodlamalarının listesi belirtilir. Algı sırası bir dizeler dizisi veya virgül ayraçlı bir liste olarak belirtilebilir.

kodlamalar atlanırsa veya null ise, dahili algılama sırası veya mb_detect_order() işlevi kullanılır.

katı

dizgekodlamalar listesi için geçersiz olduğunda izlenecek yolu belirler. katıfalse ise en yakın eşleşen kodlama döner, true belirtilmişse false döner.

katı için öntanımlı değer, mbstring.strict_detection yapılandırma seçeneği ile atanabilir.

Dönen Değerler

dizgekodlamalar listesi için geçersiz ise false, yoksa algılanan karakter kodlaması döner.

Örnekler

Örnek 1 - mb_detect_encoding() örneği

<?php
// Karakter kodlamasını dahili algı sırasını kullanarak algılatalım
echo mb_detect_encoding($str);

// "auto" değeri mbstring.language ini değerine göre genişletilir
echo mb_detect_encoding($str, "auto");

// Kodlamaları virgül ayraçlı liste olarak belirtelim
echo mb_detect_encoding($str, "JIS, eucjp-win, sjis-win");

// Kodlamaları dizi olarak belirtelim
$encodings = [
"ASCII",
"JIS",
"EUC-JP"
];
echo
mb_detect_encoding($str, $encodings);
?>

Örnek 2 - katı bağımsız değişkeninin etkisi

<?php
// 'áéóú' ISO-8859-1'de kodlandı
$str = "\xE1\xE9\xF3\xFA";

// Dizge ASCII veya UTF-8 için geçersiz, fakat UTF-8 daha iyi eşleşiyor
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], false));
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], true));

// Geçersiz kodlama bulunursa, katı bağımsız değişkeni sonucu değiştirmez
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8', 'ISO-8859-1'], false));
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8', 'ISO-8859-1'], true));
?>

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

string(5) "UTF-8" bool(false) string(10) "ISO-8859-1" string(10) "ISO-8859-1"

Bazı durumlarda aynı bayt sırası çok sayıda karakter kodlamasında geçerli bir dizge verebilir ve hangi yorumun amaçlandığını anlamak mümkündür. Örneğin, "\xC4\xA2" bayt sırasını ele alalım:

  • "Ä¢" (U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS ardından U+00A2 CENT SIGN) ISO-8859-1, ISO-8859-15 veya Windows-1252'den herhangi birinde geçerli.
  • "ФЂ" (U+0424 CYRILLIC CAPITAL LETTER EF ardından U+0402 CYRILLIC CAPITAL LETTER DJE) ISO-8859-5 için geçerli.
  • "Ģ" (U+0122 LATIN CAPITAL LETTER G WITH CEDILLA) UTF-8 için geçerli.

Örnek 3 - Çok sayıda kodlama eşleştiğinde sıralamanın etkisi

<?php
$str
= "\xC4\xA2";

// Dizge üç kodlamada da geçerli, dolayısıyla listenin başındaki döner
var_dump(mb_detect_encoding($str, ['UTF-8', 'ISO-8859-1', 'ISO-8859-5']));
var_dump(mb_detect_encoding($str, ['ISO-8859-1', 'ISO-8859-5', 'UTF-8']));
var_dump(mb_detect_encoding($str, ['ISO-8859-5', 'UTF-8', 'ISO-8859-1']));
?>

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

string(5) "UTF-8" string(10) "ISO-8859-1" string(10) "ISO-8859-5"

Ayrıca Bakınız

To Top