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

5
如何将PHP字符串安全编码为仅包含字母数字的字符串? 例如,“Hey123 & 5”可以变成“ed9e0333”或者其他更好看的字符串。 这不是关于去掉字符,而是关于编码。 目标是使任何经过此编码后的字符串适用于css id字符串(字母数字), 但稍后我需要解码它并获取原始字符串。

1
如果您的元素ID不是易于阅读的字符串,那么这难道不会使调试HTML/CSS变得不必要地困难吗? - Paolo
这是一个 AJAX 树,其中使用 ID 来表示父子关系。 - AlexA
3个回答

5
bin2hex 看起来符合要求(虽然不如其他编码紧凑)。另外要注意,CSS id 不能以数字开头,所以在最终 ID 前,你需要在 bin2hex 结果前加上前缀。
对于反向操作(解码),不存在 hex2bin,但 PHP 文档网站上有人提出了以下建议(未经测试):
$bin_str = pack("H*" , $hex_str);

1
我测试了'pack'函数,它像魔法一样好用!我甚至使用了二进制转十六进制和打包的组合来编码和解码'mcrypt_encrypt'的输出。每次都完美无缺地工作。 - ThoriumBR
hex2bin() 函数可在 PHP 5.4.0 及以上版本中使用。 - Kouber Saparev

-2

4
base64_encode 后字符串末尾会有一个 "=" 字符,不完全是字母或数字。 - AlexA

-2

这个线程已经很久没有人回复了,但是我正在寻找解决这个问题并找到了这个线程的方法,也许有人会发现这个简单的答案很有用。

我的解决方案是:

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

1
Base64也可以包含+/,所以这个解决方案并不是100%正确的。 - vim
and contain as well = - Wraith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接