Методы определения типа кодировки с использованием php - PullRequest
1 голос
/ 31 июля 2011

У меня есть переменная строкового типа PHP, которая может быть закодирована в шестнадцатеричном формате или в Base64.

Например:

737461636b6f766572666c6f772e636f6d
c3RhY2tvdmVyZmxvdy5jb20=

Обе строки означают stackoverflow.com, проблема в том, что я не знаю, какая из них будет HEX или Base64, потому что я не знаю, какое декодированиеметод применения.

Можно ли определить метод кодирования, не зная закодированный текст?Если да, то как это сделать в php?

Ответы [ 3 ]

1 голос
/ 31 июля 2011

Это не должно быть слишком сложно.Допустимый набор символов для шестнадцатеричного значения - [0-9a-f], в то время как действительный набор для Base64 больше похож на [a-zA-Z0-9\+/], возможно, с одним или двумя завершающими символами = для заполнения.Вы должны быть в состоянии использовать регулярные выражения, чтобы различать одно от другого.

Конечно, могут быть некоторые случаи, когда строка представляется допустимой в обоих кодировках, поэтому не существует надежного способа тестирования, основанного только на самой строке.В целом, однако, было бы довольно редко для нетривиальной входной строки, кодированной в Base64, приводить к выходной строке, которая содержит только допустимые шестнадцатеричные символы и не содержит символов заполнения.Довольно редко, но не невозможно.

1 голос
/ 31 июля 2011

Нет способа узнать наверняка, находится ли строка в Base64 / HEX, просто взглянув на нее.Вам нужно будет включить в строку дополнительный бит, указывающий, какой он, а затем прочитать его в своем коде и при необходимости расшифровать.

Если случайно строка содержит букву после 'F', выМожно быть уверенным, что это Base64, но это может быть Base64, хотя это не так, поэтому невозможно быть уверенным без какого-либо заголовка перед строкой, сообщающей вам, что такое кодировка.

1 голос
/ 31 июля 2011

Если вы можете гарантировать только эти две кодировки, Base64 оканчивается на =, а шестнадцатеричный код будет включать только [a-fA-F0-9].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...