Процентное кодирование всей строки PHP в пронумерованные значения ASCII для запутывания

Я хотел бы каким-то образом скрыть содержимое $url = "http://blah.somedomain.com/contents/somefolder/somefile.htm";, чтобы я мог использовать их для ссылок, но чтобы URL-адреса не были легко читаемы людьми при просмотре источника страницы. Запутанный URL-адрес по-прежнему должен работать в браузере при нажатии на него, поэтому другие методы запутывания, которые я рассматривал, бесполезны.

То, что нам нужно, это, например. $obscureurl = "%3A%2F%2F"...и т.д.

Любые идеи? Спасибо.


Изменить: Спасибо за предложения, но чтобы уточнить, я должен был сказать, что я не после кодирования в объекты HTML (значения #), я после Percent-encoding (шестнадцатеричные значения в ASCII).

Например, чтобы изменить [email protected] на: %68%65%6c%6c%6f%40%6d%65%2e%63%6f%6d

Таблица ASCII для каждой буквы и символа находится здесь: http://ascii.cl/

Возможно ли такое полное преобразование с помощью PHP? Спасибо


person nooblag    schedule 07.03.2015    source источник


Ответы (2)


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

Вот, собственно, и весь механизм кодирования. Возьмите необработанные байты в шестнадцатеричном виде (bin2hex), 2 символов на байт, и добавьте % в начале.

Не то, чтобы это действительно много сделало для запутывания. Браузер действительно может даже не отображать его в закодированном виде, и даже поисковые системы могут отображать только декодированную форму. Кроме того, вы по-прежнему создаете канонический URL. Неважно, что именно содержит этот URL; если у людей есть ссылка на него, у них есть ссылка на него, независимо от того, насколько удобочитаема эта ссылка для человека.

person deceze♦    schedule 16.03.2015
comment
Как это можно изменить, чтобы возвращать строку вместо массива? Спасибо - person nooblag; 19.03.2015

Я вижу 2 простых способа добиться этого:

person PJ Bergeron    schedule 07.03.2015