(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_detect_encoding — Karakter kodlamasını algılar
$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.
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ı
dizge
kodlamalar
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.
dizge
kodlamalar
listesi için geçersiz ise false
, yoksa algılanan karakter kodlaması döner.
Ö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:
Ö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"