phphtmlurlobfuscationpercent-encoding

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


I'd like to somehow obscure the contents of $url = "http://blah.somedomain.com/contents/somefolder/somefile.htm"; so I can use them for links but so that the URLs are not easily read by humans when looking at the page source. The obfuscated URL still needs to work in a browser when clicking on it though so other methods of obfuscation that I've looked at are no good.

What we're after is e.g. $obscureurl = "%3A%2F%2F"...etc

Any ideas? Thanks.


Edit: Thanks for suggestions so far, but to clarify, I should have said that I'm not after encoding into HTML entities (the # values), I'm after Percent-encoding (hex values in ASCII).

For example, to change hello@me.com into: %68%65%6c%6c%6f%40%6d%65%2e%63%6f%6d

ASCII table is here for the hex of each letter and symbol: http://ascii.cl/

Is this kind of complete conversion possible with PHP? Thanks


Solution

  • $url = '..';
    $encoded = join(array_map(function ($byte) { return "%$byte"; }, str_split(bin2hex($url), 2)));
    

    That's essentially the entire encoding mechanism. Take the raw bytes in hex (bin2hex), 2 characters per byte, and prepend a %.

    Not that this will really do a whole lot for obfuscation. The browser may indeed not even display it in its encoded form, and even search engines may display only the decoded form. Further, you're still producing a canonical URL. It doesn't matter what exactly that URL contains; if people have a link to it, they have a link to it, regardless of how human readable that link may or may not be.