Przepraszam za opóźnioną odpowiedź na już udzielone pytanie, ale nie sądzę, że base64_decode ($ x, true) jest wystarczająco dobrym rozwiązaniem tego problemu. W rzeczywistości może nie być dobrego rozwiązania, które działa wbrew danym danym. Na przykład mogę umieścić wiele złych wartości w $ x i nie uzyskać fałszywej wartości zwracanej.
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Ǻ��ܡם"
myślę, że oprócz ścisłego sprawdzania wartości zwrot, to trzeba także zrobić walidację po dekodowania. Najbardziej niezawodnym sposobem jest dekodowanie, a następnie sprawdzanie w znanym zestawie możliwych wartości.
Bardziej ogólne rozwiązanie o dokładności mniejszej niż 100% (bliżej dłuższych łańcuchów, niedokładne w przypadku krótkich łańcuchów) jest jeśli sprawdzisz wyjście, aby zobaczyć, czy wiele z nich znajduje się poza normalnym zakresem utf-8 (lub czymkolwiek, co Cię koduje użyj) znaków.
Zobacz ten przykład:
<?php
$english = array();
foreach (str_split('[email protected]#$%^*()_+|}?><": 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";
?>
wyniki:
Max value english = 195
Max nonsense = 233
Więc można zrobić coś takiego:
if ($maxDecodedValue > 200) {} //decoded string is Garbage - original string not base64 encoded
else {} //decoded string is useful - it was base64 encoded
Powinieneś raczej użyć średnią() z dekodowane wartości zamiast max(), użyłem właśnie max() w tym przykładzie, ponieważ niestety nie ma wbudowanego mean() w PHP. Jaka miara (średnia, maksymalna itd.) W zależności od progu (np. 200) zależy od szacowanego profilu użytkowania.
Podsumowując, jedynym zwycięskim ruchem nie jest granie. Starałbym się unikać rozpoznawania base64 w pierwszej kolejności.
zniechęcanie ... – catbadger