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

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

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

В принципе, поняв весь этот двоично-шестнадцатирично-десятичный коматоз, можно понять как нам кодировать символы средствами PHP. Javascript "понимает" литералы юникода в таком виде: \u0410 т.е. префикс у него свой. Наша задача заключается в том, что нам будет нужно перегнать строку, которая содержит, как кирилицу, латиницу и спец. символы в шестнадцатиричное их представление. Причём каждый символ в отдельности.

Здесь мы постараемся обойтись без всякого рода расширений типа mb_string и iconv (мы же не ищем лёгких путей) а только фунуцией PHP bin2hex() - она вернет шестнадцатиричное представление строки-символа например 'a'. По строке пройдёмся циклом, как по массиву.  И будем работать с каждым символом по отдельности.

Кстати если у вас не прописано в php.ini  mbstring.func_overload=1 и впринципе недоступна mb_string. И если ваш сайт в UTF-8 То код:

  
    echo strlen('один');
  

Выведет число 8! - Почему? Правильно: потому что каждый кирилический символ в юникоде кодируется двумя байтами, вот такие приколы люди и имеют ввиду, когда говорят о сложности работы в PHP с unicode. Фактически функция strlen() - возвращает нам не длину слова в буквах, а длину слова в байтах! И вкоде ниже, в цикле мы фактически будем шагать не по символам слова, а по его байтам! В данном случае нам это как раз на руку. По сути нам интересен интервал от U+0410 до U+044F - интервал кириллицы в юникоде символы здесь представлены двумя байтами. Если взятый ( идём циклом по строке ) байт символов (первый из двух) умещается в диапазоне от D0 до D1 (можете посмотреть таблицу символов unicode), то это значит, что к нему нужно прибавить (здесь я имею ввиду операцию конкатенации ) следующий за ним байт, точнее его шестнадцатиричное представление.

Иначе если взятый байт меньше или равен 7Е то значит нам попался однобайтный символ, к нему просто конкатенируем спереди "\u00" (с дополнительными нулями потому что так Javascript работает)

А совсем в ином случае (если байт не в диапазоне D0-D1 и он больше 7Е) тупо пропускаем то что попалось через PHP функцию htmlentities() .

Ура мы получили корректное шестнадцатиричное представление символов подопытной строки, но однобайтные символы у нас уже готовы к выводу через JavaScript, а вот то что у нас представляет кирилицу находится пока только в шестнадцатиричном представлении, и правильно работать не будет.

Теперь шестнадцатиричные коды кирилицы нужно перевести в кодовые точки unicode. Для этого смотрим в таблицу unicode и тупо копируем значения в два массива паралельно. В одном будут кодовые точки, а в другом шестнадцатиричные числа, соответсвующие этим точкам. Смотрите не напутайте :)



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


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






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