将整个 PHP 字符串百分比编码为编号的 ASCII 值以进行混淆

Percent-encoding entire PHP string into numbered ASCII values for obfuscation

我想以某种方式隐藏 $url = "http://blah.somedomain.com/contents/somefolder/somefile.htm"; 的内容,以便我可以将它们用于链接,但这样 URL 在查看页面源代码时就不容易被人阅读。混淆后的 URL 在点击它时仍然需要在浏览器中工作,所以我看过的其他混淆方法并不好。

我们所追求的是例如$obscureurl = "%3A%2F%2F"...等等

有什么想法吗?谢谢。


编辑:感谢到目前为止的建议,但为了澄清,我应该说我不是在编码成 HTML 实体(# 值)之后,我在 Percent-encoding(ASCII 中的十六进制值)之后。

例如,将hello@me.com改为:%68%65%6c%6c%6f%40%6d%65%2e%63%6f%6d

ASCII table这里是每个字母和符号的十六进制:http://ascii.cl/

PHP可以实现这种完整的转换吗?谢谢

我可以看到实现此目的的 2 种简单方法:

  • 用 html 实体替换 link 的每个字符(参见 How to convert all characters to their html entity equivalent using PHP
  • 使用某种 ID 并将匹配的 url 保存在您的数据库中:(类似于 http://example.com/redirect/412
$url = '..';
$encoded = join(array_map(function ($byte) { return "%$byte"; }, str_split(bin2hex($url), 2)));

基本上就是整个编码机制。以十六进制 (bin2hex) 的原始字节,每个字节 2 个字符,并在前面加上 %.

并不是说这真的会对混淆起到很大的作用。浏览器甚至可能不会以编码形式显示它,甚至搜索引擎也可能只显示解码形式。此外,您仍在制作规范 URL。 URL 究竟包含什么并不重要;如果人们对它有 link,他们就会对它有 link,不管 link 的可读性如何。