Zaten-cevap soruya geç bir yanıt için özür dilemek, ama ben base64_decode (true $ x), bu sorun için yeterince iyi bir çözüm olduğunu düşünmüyorum. Aslında, herhangi bir giriş karşı çalışan çok iyi bir çözüm olmayabilir. Örneğin, ben $ x içine kötü değerlerin sürü koymak ve yanlış bir dönüş değeri elde edemezsiniz.
var_dump(base64_decode('wtf mate',true));
string(5) "���j�"
var_dump(base64_decode('This is definitely not base64 encoded',true));
string(24) "N���^~)��r��[jǺ��ܡם"
Ben sıkı bir dönüş değeri kontrole ek olarak, ayrıca post-decode doğrulama yapmak gerekir diye düşünüyorum. Eğer çözmek ve daha sonra olası değerler bilinen bir dizi karşı kontrol eğer en güvenilir yoludur.
Birçok utf-8 (veya ne olursa olsun kodlama kullanmak) bir karakter normal aralığın dışında olup olmadığını görmek için çıkış kontrol if (kısa dizeleri için yanlış uzun dizeleri ile daha yakın,) en az% 100 doğruluk ile daha genel bir çözümdür.
Bu örneğe bakın:
<?php
$english = array();
foreach (str_split('az019AZ~~~!@#$%^*()_+|}?><": Iñtërnâtiônàlizætiøn') as $char) {
echo ord($char) . "\n";
$english[] = ord($char);
}
echo "Max value english = " . max($english) . "\n";
$nonsense = array();
echo "\n\nbase64:\n";
foreach (str_split(base64_decode('Not base64 encoded',true)) as $char) {
echo ord($char) . "\n";
$nonsense[] = ord($char);
}
echo "Max nonsense = " . max($nonsense) . "\n";
?>
Sonuçlar:
Max value english = 195
Max nonsense = 233
Yani böyle bir şey olabilir:
if ( $maxDecodedValue > 200 ) {} //decoded string is Garbage - original string not base64 encoded
else {} //decoded string is useful - it was base64 encoded
PHP ne yazık ki hiçbir yerleşik ortalama () var çünkü muhtemelen yerine max deşifre değerlerin ortalamasını () () kullanmanız gerekir, ben sadece bu örnekte max () kullanılır. Eğer eşik (örn. 200) tahmini kullanım profiline bağlıdır şeye karşı (vb, max ortalama) kullanmak ne ölçüsüdür.
Sonuç olarak, sadece kazanan hareket oyun değildir. Ben ilk etapta base64 ayırt etmek zorunda kalmamak için denemek istiyorum.