如何将PHP字符串安全地编码为字母数字?

如何将PHP字符串安全地编码为字母数字?,php,encoding,Php,Encoding,如何将PHP字符串安全地编码为字母数字字符串? 例如,“Hey123&5”可能变成“ed9e0333”,或者可能是更好看的东西 这不是关于剥离字符,而是关于编码 目标是使此编码后的任何字符串都适合css id字符串(alnum), 但稍后我需要将其解码回来并获得原始字符串。您可以使用BASE64编码 似乎符合要求(尽管不像其他编码那样紧凑)。还要注意CSS ID不能以数字开头,因此在获得最终ID之前,您需要在bin2hex结果中添加前缀 对于反向(解码),没有像hex2bin这样的东西,但是PH

如何将PHP字符串安全地编码为字母数字字符串? 例如,“Hey123&5”可能变成“ed9e0333”,或者可能是更好看的东西 这不是关于剥离字符,而是关于编码

目标是使此编码后的任何字符串都适合css id字符串(alnum),
但稍后我需要将其解码回来并获得原始字符串。

您可以使用BASE64编码

似乎符合要求(尽管不像其他编码那样紧凑)。还要注意CSS ID不能以数字开头,因此在获得最终ID之前,您需要在
bin2hex
结果中添加前缀

对于反向(解码),没有像hex2bin这样的东西,但是PHP文档网站上有人建议(未经测试):


这个线程已经死了很长一段时间,但我一直在寻找这个问题的解决方案,并发现这个线程,有人可能会发现简单的答案很有用

我的解决办法是:

str_replace('=', '_', base64_encode($data));

base64_编码后,字符串末尾有“=”字符,而不是100%字母数字。如果元素ID不是人类可读的字符串,这不会使调试HTML/CSS变得不必要的困难吗?这是一个ajax树,ID用于父子关系。我测试了“pack”函数,效果非常好!我甚至使用bin2hex/pack对“mcrypt_encrypt”输出进行编码和解码。每次工作都完美无缺。PHP5.4.0base64中提供了hex2bin(),它还可以包含
+
/
,因此此解决方案不是100%正确的,并且包含
=
str_replace('=', '_', base64_encode($data));