我有一个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'+/]
,可能后面有一个或两个=
字符用于填充。您应该能够使用正则表达式来区分一个和另一个。