2015-01-17 3 views
1

У меня есть этот скрипт:строка base64_encode/decode не работает?

function is_base64($s){ 
     // Check if there are valid base64 characters 
     if (!preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s)) return false; 

     // Decode the string in strict mode and check the results 
     $decoded = base64_decode($s, true); 
     if(false === $decoded) return false; 

     // Encode the string again 
     if(base64_encode($decoded) != $s) return false; 

     return true; 
    } 

Вызывается is_base64($input)

где $input есть две строки я стараюсь, чтобы протестировать функции.

Об этом сообщается в порядке: !!K0deord*test

Об этом сообщается не в порядке: Kilroy2P4All

Что может быть разница, что делает его вернуться ложным?

+0

Регулярное выражение не требуется при декодировании с использованием аргумента '$ strict'. Что-то вроде: 'return! (Base64_decode ($ s, true) === false);' должно быть достаточно. –

+0

Правда. См. Следующий ответ ;-) – osomanden

ответ

2

Вы декодируете значение с помощью аргумента $strict, что означает, что регулярное выражение не требуется (декодирование просто завершится ошибкой, если в строке будут недопустимые символы).

Кодирование декодированной строки также не требуется. Если кодированная строка успешно декодирована, то она действительна; его кодировка снова не изменяет действительности.

Что-то вроде этого должно быть достаточно, чтобы проверить строку в кодировке base64:

function is_base64($s) { 
    return ! (base64_decode($s, true) === false); 
} 

Это просто расшифровывает значение, а затем возвращает или не удалось это или нет.

+0

Так верно. Огромное спасибо ;-) – osomanden

Смежные вопросы