Как спрятать ссылки - Как спрятать ссылки стр.3

Как спрятать ссылки - Как спрятать ссылки стр.3

Индекс материала
Как спрятать ссылки
Как спрятать ссылки стр.2
Как спрятать ссылки стр.3
Все страницы

Осталось только прогнать всё это через функцию str_replace() и вернуть из нашей функции. Ниже приведён полный код функции с массивами сопоставления кодировки и подробными комментариями:

<?php
// На всякий случай проверка:
if(!function_exists('conv'))
{
    function conv($str)
    {
        // Переменная для "накопления" результирующей строки:
        $uot = '';

        // Здесь хранятся кодовые точки unicode 
        // в формате удобном JavaScript:
        $unicodePoints = array( '\u0410','\u0411','\u0412','\u0413',
                                '\u0414','\u0415','\u0416','\u0417',
                                '\u0418','\u0419','\u041A','\u041B',
                                '\u041C','\u041D','\u041E','\u041F',
                                '\u0420','\u0421','\u0422','\u0423',
                                '\u0424','\u0425','\u0426','\u0427',
                                '\u0428','\u0429','\u042A','\u042B',
                                '\u042C','\u042D','\u042E','\u042F',
                                '\u0430','\u0431','\u0432','\u0433',
                                '\u0434','\u0435','\u0436','\u0437',
                                '\u0438','\u0439','\u043A','\u043B',
                                '\u043C','\u043D','\u043E','\u043F',
                                '\u0440','\u0441','\u0442','\u0443',
                                '\u0444','\u0445','\u0446','\u0447',
                                '\u0448','\u0449','\u044A','\u044B',
                                '\u044C','\u044D','\u044E','\u044F');

        // Здесь хранятся шестнадцатиричные представления чисел
        // этот массив сопоставим с массивом сверху по таблице
        // юникод
        $hexView = array(   'd090','d091','d092','d093',
                            'd094','d095','d096','d097',
                            'd098','d099','d09a','d09b',
                            'd09c','d09d','d09e','d09f',
                            'd0a0','d0a1','d0a2','d0a3',
                            'd0a4','d0a5','d0a6','d0a7',
                            'd0a8','d0a9','d0aa','d0ab',
                            'd0ac','d0ad','d0ae','d0af',
                            'd0b0','d0b1','d0b2','d0b3',
                            'd0b4','d0b5','d0b6','d0b7',
                            'd0b8','d0b9','d0ba','d0bb',
                            'd0bc','d0bd','d0be','d0bf',
                            'd180','d181','d182','d183',
                            'd184','d185','d186','d187',
                            'd188','d189','d18a','d18b',
                            'd18c','d18d','d18e','d18f' );

        // Идём по строке как по массиву:
        for($i=0; $i < strlen( $str ); $i++)
        {
            // Если байт начинается с 11xx, то это стартовый 
            // байт многобайтной последовательности
            // Здесь у нас идёт сравнение с шестнадцатиричным 
            // числом: 'd0', в двоичном представлении
            // это будет как раз число 11010000, если это так...
            if(bin2hex($str{$i}) >= 'd0' && bin2hex($str{$i}) <= 'd1')
            { 
            	// то записываем в результирующую стоку этот 
                // байт в шестнадцатиричном представлении 
                // и следующий за ним, так как это будут два 
                // байта одного кирилического символа:
                $uot .= bin2hex($str{$i}).bin2hex($str{$i+1});
                
                // увеличиваем счётчик, что бы проскочить на 
                //следующий итерации уже взятый нами следующий байт:
                $i++;
            }
            // Иначе если шестнадцатиричное представление 
            // байта меньше 7Е, то перед нами однобайтный символ:
            elseif(bin2hex($str{$i}) <= '7e')
            {
                $uot .= '\u00'.bin2hex($str{$i});
            }
            // Иначе перед нами иной символ который просто обрабатываем:
            else $uot .= htmlentities($str{$i},ENT_QUOTES,'UTF-8');
        }
        // Здесь замещаем шестнадцатиричные представления кирилических символов
        // кодовыми точками unicode и возвращаем результат:
        return str_replace($hexView,$unicodePoints, $uot);
    }
}
?>

В итоге получаем кодированную строку примерно такого вида:

\u003c\u0061\u0020\u0063\u006c\u0061\u0073\u0073\u003d\u0022\u0068\u006f

Котую выводим в PHP - скрипте следующей конструкцией:

  echo '<script type="text/javascript">
           document.write("'.conv('<a href="/xxxx">ссылка</a>').'");
        </script>';

Она скроет от роботов лишние ссылки, которые в принципе нужно оставить на странице для удобства пользователей. Что вы кстати можете наблюдать у меня на сайте, если просмотрите исходный код страницы. Уф.. Фсё!



Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 140 гостей онлайн