使用php识别编码类型的方法


Methods for identifying encoding type using php

我有一个PHP字符串类型变量,它可能以十六进制模式或Base64编码。

例如:

737461636b6f766572666c6f772e636f6d
c3RhY2tvdmVyZmxvdy5jb20=

两行都意味着stackoverflow.com,问题是我不知道哪一个将是HEX或Base64,因为我不知道应用哪种解码方法。

是否有可能在不知道编码文本的情况下确定编码方法?如果是,如何在php?

没有办法知道字符串是否在Base64/HEX仅仅通过查看它。您必须在字符串中包含一个额外的位,指示它是哪个位,然后在代码中读取该位并根据需要进行解码。

如果字符串碰巧在'F'后面包含一个字母,你可以确定它是Base64,但它可能是Base64,即使它不是,所以如果在字符串之前没有某种头告诉你编码是什么,就没有办法确定。

如果你能保证只有这两种编码,Base64将以=结束,十六进制将只包括[a-fA-F0-9]

这应该不会太难。十六进制的有效字符集是[0-9a-f],而Base64的有效字符集更像[a-zA-Z0-9'+/],可能后面有一个或两个=字符用于填充。您应该能够使用正则表达式来区分一个和另一个。

当然,在某些情况下,字符串在两种编码中似乎都是有效的,因此仅基于字符串本身进行测试并没有确定的方法。但是,一般来说,用Base64编码的重要输入字符串很少会导致只包含有效十六进制字符而不包含填充字符的输出字符串。非常罕见,但并非不可能。