Blog. Just Blog

Web-мастеру и не только

Полезные решения для Web-мастеров
Web-мастеру и не только - RSS-канал Web-мастеру и не только - Карта сайта

CSS: текст, зачеркнутый линией другого цвета

10.03.2013 | Категория: Web-мастеру и не только | Автор: ManHunter
Несколько вариантов реализации на CSS простенького эффекта выделения текста - зачеркивание его линией другого цвета. Когда-то передо мной встала такая задача, я с ней успешно справился. Потом решил поэкспериментировать и добиться этого же эффекта, но другими способами. Вот что у меня получилось. Общая суть всех примеров в том, что создается контейнер с перечеркивающей линией одного цвета, а в нем содержится текст другого цвета.

Первый вариант, которым и была решена задача, - использование HTML-тега <s> или <strike>. Оба этих тега поддерживаются всеми браузерами, но с HTML 4.01 strike считается устаревшим, а в HTML5 вообще упразднен. Тем не менее, такой вариант имеет место быть.
  1. <style type="text/css">
  2. .fixed_text_1 {
  3.     color:#FF0000;  /* цвет зачеркивающей линии */
  4. }
  5. .fixed_text_1 span {
  6.     color:#000000;  /* цвет зачеркиваемого текста */
  7. }
  8. </style>
  9.  
  10. <class="fixed_text_1"><span>Исправленному</span></sверить
  11. <strike class="fixed_text_1"><span>Исправленному</span></strikeверить
Если почитать документацию по HTML, то там написано, что вместо этих тегов рекомендуется использовать тег &lt;del&gt;. Кроме визуального эффекта, он является еще и семантически более правильным, если требуется выделить текст, который утратил актуальность.

Читать статью целиком »
Просмотров: 21065 | Комментариев: 2

Подсветка результатов поиска на странице

05.02.2013 | Категория: Web-мастеру и не только | Автор: ManHunter
Сложно представить современный web-сайт без поиска. И хорошим тоном считается не просто выводить все страницы, на которых был найден запрошенный результат, но и как-нибудь выделять искомые слова в тексте. Если контент сайта представляет собой обычный текст без html-разметки, то тут все просто, достаточно использовать что-то типа str_replace. А как быть, если на странице имеются html-теги, и надо выделить только тот текст, который не заключен внутри тегов? Например, нам надо выделить слово "поиск" в такой тестовой строке:
  1. Для поиска и просмотра <a href="/search" title="Результаты поиска">результатов
  2. поиска</aпройдите по поисковой ссылке.
После простой замены она превратится в нечто чудовищное:
  1. Для <b>поиск</b>а и просмотра <a href="/search" title="Результаты <b>поиск</b>а">
  2. результатов <b>поиск</b>а</aпройдите по <b>поиск</b>овой ссылке.
Как видите, текст в атрибутах title нарушен. Это простейший пример, на деле это может привести к полному развалу верстки, а то и еще хуже. При правильно сформированных поисковых запросах злоумышленники смогут даже внедрить в код страницы вредоносные скрипты. Для решения этой проблемы воспользуемся регулярными выражениями:
  1. // Искомая строка для подсветки на странице
  2. $search 'html';
  3. // Создаем строку для регулярного выражения
  4. $pattern "/((?:^|>)[^<]*)(".$search.")/si";
  5. // Подсвеченная строка
  6. $replace '$1<b style="color:#FF0000; background:#FFFF00;">$2</b>';
  7. // Заменяем
  8. $html preg_replace($pattern$replace$html);
Код также немного упрощен для удобства восприятия. В реальных проектах при составлении регулярного выражения $pattern надо обязательно экранировать в искомой строке все служебные символы, которые могут быть использованы в регулярных выражениях.

Читать статью целиком »
Просмотров: 12243 | Комментариев: 7

Удаленное управление питанием сервера через Rack PDU

15.12.2012 | Категория: Web-мастеру и не только | Автор: ManHunter

Удаленное управление питанием сервера через Rack PDU

Когда-то по работе возникла необходимость автоматизированного управления серверами в стойке дата-центра. Вопрос с контролем за питанием был решен через power-свич (Switched Rack PDU), который имел возможность удаленного управления по telnet. Для эмуляции действий пользователя я написал вот такой небольшой класс на PHP. Может быть пригодится кому-нибудь еще.

Читать статью целиком »
Просмотров: 5218 | Комментариев: 0

Оценка качества изображения для печати

15.10.2012 | Категория: Web-мастеру и не только | Автор: ManHunter

Оценка качества изображения для печати

Качество изображения измеряется в количествах пикселей (точек) на дюйм (1 дюйм = 25.4 мм), единица измерения - dpi (Dots Per Inch). К типографской печати обычно принимаются изображения не менее 150 dpi, а вот для фотопечати качество должно быть уже 300 dpi и больше. Однако, при оценке качества изображения обязательно надо учитывать и размер печати. К примеру, исходный файл из цифромыльницы с разрешением 1200х900 пикселов будет неплохо смотреться на фотокарточке 10х15 см, но для печати на плакате его качества будет недостаточно. А кадры с Nikon D800 разрешением 7360х4912 пикселов можно без проблем распечатать на формате A1 и повесить на стенку.

Для вычисления dpi надо желаемые размеры печати перевести в дюймы, а затем поделить разрешение исходного файла на эти значения по ширине и высоте. Полученные значения dpi и будут искомым результатом оценки качества изображения. Осталось оформить это все вот в такую несложную функцию:
  1. // Функция для расчета dpi изображения
  2. function get_dpi($picture$print_x$print_y) {
  3.     if (file_exists($picture)) {
  4.         list ($x,$y)=GetImageSize($picture);
  5.         if ($x && $y && $print_x && $print_y) {
  6.             // "Повернуть" изображение под размер печати
  7.             if ($print_x<$print_y) {
  8.                 if ($x>$y) {
  9.                     list ($x,$y)=array($y,$x);
  10.                 }
  11.             }
  12.             // Посчитать dpi по ширине и высоте
  13.             $dpi=array(
  14.                 'dpi_x'=>intval($x/($print_x/2.54)),
  15.                 'dpi_y'=>intval($y/($print_y/2.54))
  16.             );
  17.             return $dpi;
  18.         }
  19.         else {
  20.             return false;
  21.         }
  22.     }
  23.     else {
  24.         return false;
  25.     }
  26. }
Параметры функции: $picture - путь к файлу с изображением, $print_x - ширина печати в сантиметрах, $print_y - высота печати в сантиметрах. На выходе массив со значениями dpi по высоте и ширине для данного изображения или false, если файл отсутствует, имеет неправильный формат или заданы неправильные размеры печати. В случае необходимости изображение будет "повернуто" под размер печати.

Читать статью целиком »
Просмотров: 6641 | Комментариев: 2

Определение мобильных браузеров с помощью .htaccess

09.09.2012 | Категория: Web-мастеру и не только | Автор: ManHunter
Недавно я разбирался с одним инфицированным сайтом. При заходе на него обычным браузером все было нормально, но при заходе с мобильных устройств, смартфонов и планшетников, пользователя автоматически перебрасывало на говносайт с троянами. Трояны у меня никаких эмоций не вызывают, а вот определение мобильных устройств было сделано очень интересно - через инфицированный файл .htaccess в корневом каталоге сайта. Я уже приводил пример определения мобильных браузеров на PHP, давайте посмотрим, как определение мобильных браузеров сделано в этом случае. В конец файла .htaccess был дописан следующий блок:
  1. <ifModule mod_rewrite.c>
  2. RewriteEngine on
  3. # Проверить строку UserAgent браузера
  4. RewriteCond %{HTTP_USER_AGENTacs [NC,OR]
  5. RewriteCond %{HTTP_USER_AGENTalav [NC,OR]
  6. RewriteCond %{HTTP_USER_AGENTalca [NC,OR]
  7. RewriteCond %{HTTP_USER_AGENTamoi [NC,OR]
  8. RewriteCond %{HTTP_USER_AGENTaudi [NC,OR]
  9. RewriteCond %{HTTP_USER_AGENTaste [NC,OR]
  10. RewriteCond %{HTTP_USER_AGENTavan [NC,OR]
  11. RewriteCond %{HTTP_USER_AGENTbenq [NC,OR]
  12. RewriteCond %{HTTP_USER_AGENTbird [NC,OR]
  13. RewriteCond %{HTTP_USER_AGENTblac [NC,OR]
  14. RewriteCond %{HTTP_USER_AGENTblaz [NC,OR]
  15. RewriteCond %{HTTP_USER_AGENTbrew [NC,OR]
  16. RewriteCond %{HTTP_USER_AGENTcell [NC,OR]
  17. RewriteCond %{HTTP_USER_AGENTcldc [NC,OR]
  18. RewriteCond %{HTTP_USER_AGENTcmd- [NC,OR]
  19. RewriteCond %{HTTP_USER_AGENTdang [NC,OR]
  20. RewriteCond %{HTTP_USER_AGENTdoco [NC,OR]
  21. RewriteCond %{HTTP_USER_AGENTeric [NC,OR]
  22. RewriteCond %{HTTP_USER_AGENThipt [NC,OR]
  23. RewriteCond %{HTTP_USER_AGENTinno [NC,OR]
  24. RewriteCond %{HTTP_USER_AGENTipaq [NC,OR]
  25. RewriteCond %{HTTP_USER_AGENTjava [NC,OR]
  26. RewriteCond %{HTTP_USER_AGENTjigs [NC,OR]
  27. RewriteCond %{HTTP_USER_AGENTkddi [NC,OR]
  28. RewriteCond %{HTTP_USER_AGENTkeji [NC,OR]
  29. RewriteCond %{HTTP_USER_AGENTleno [NC,OR]
  30. RewriteCond %{HTTP_USER_AGENTlg-[NC,OR]
  31. RewriteCond %{HTTP_USER_AGENTlg-[NC,OR]
  32. RewriteCond %{HTTP_USER_AGENTlg-[NC,OR]
  33. RewriteCond %{HTTP_USER_AGENTlge- [NC,OR]
  34. RewriteCond %{HTTP_USER_AGENTmaui [NC,OR]
  35. RewriteCond %{HTTP_USER_AGENTmaxo [NC,OR]
  36. RewriteCond %{HTTP_USER_AGENTmidp [NC,OR]
  37. RewriteCond %{HTTP_USER_AGENTmits [NC,OR]
  38. RewriteCond %{HTTP_USER_AGENTmmef [NC,OR]
  39. RewriteCond %{HTTP_USER_AGENTmobi [NC,OR]
  40. RewriteCond %{HTTP_USER_AGENTmot- [NC,OR]
  41. RewriteCond %{HTTP_USER_AGENTmoto [NC,OR]
  42. RewriteCond %{HTTP_USER_AGENTmwbp [NC,OR]
  43. RewriteCond %{HTTP_USER_AGENTnec- [NC,OR]
  44. RewriteCond %{HTTP_USER_AGENTnewt [NC,OR]
  45. RewriteCond %{HTTP_USER_AGENTnoki [NC,OR]
  46. RewriteCond %{HTTP_USER_AGENTopwv [NC,OR]
  47. RewriteCond %{HTTP_USER_AGENTpalm [NC,OR]
  48. RewriteCond %{HTTP_USER_AGENTpana [NC,OR]
  49. RewriteCond %{HTTP_USER_AGENTpant [NC,OR]
  50. RewriteCond %{HTTP_USER_AGENTpdxg [NC,OR]
  51. RewriteCond %{HTTP_USER_AGENTphil [NC,OR]
  52. RewriteCond %{HTTP_USER_AGENTplay [NC,OR]
  53. RewriteCond %{HTTP_USER_AGENTpluc [NC,OR]
  54. RewriteCond %{HTTP_USER_AGENTport [NC,OR]
  55. RewriteCond %{HTTP_USER_AGENTprox [NC,OR]
  56. RewriteCond %{HTTP_USER_AGENTqtek [NC,OR]
  57. RewriteCond %{HTTP_USER_AGENTqwap [NC,OR]
  58. RewriteCond %{HTTP_USER_AGENTsage [NC,OR]
  59. RewriteCond %{HTTP_USER_AGENTsams [NC,OR]
  60. RewriteCond %{HTTP_USER_AGENTsany [NC,OR]
  61. RewriteCond %{HTTP_USER_AGENTsch- [NC,OR]
  62. RewriteCond %{HTTP_USER_AGENTsec- [NC,OR]
  63. RewriteCond %{HTTP_USER_AGENTsend [NC,OR]
  64. RewriteCond %{HTTP_USER_AGENTseri [NC,OR]
  65. RewriteCond %{HTTP_USER_AGENTsgh- [NC,OR]
  66. RewriteCond %{HTTP_USER_AGENTshar [NC,OR]
  67. RewriteCond %{HTTP_USER_AGENTsie- [NC,OR]
  68. RewriteCond %{HTTP_USER_AGENTsiem [NC,OR]
  69. RewriteCond %{HTTP_USER_AGENTsmal [NC,OR]
  70. RewriteCond %{HTTP_USER_AGENTsmar [NC,OR]
  71. RewriteCond %{HTTP_USER_AGENTsony [NC,OR]
  72. RewriteCond %{HTTP_USER_AGENTsph- [NC,OR]
  73. RewriteCond %{HTTP_USER_AGENTsymb [NC,OR]
  74. RewriteCond %{HTTP_USER_AGENTt-mo [NC,OR]
  75. RewriteCond %{HTTP_USER_AGENTteli [NC,OR]
  76. RewriteCond %{HTTP_USER_AGENTtim- [NC,OR]
  77. RewriteCond %{HTTP_USER_AGENTtosh [NC,OR]
  78. RewriteCond %{HTTP_USER_AGENTtsm- [NC,OR]
  79. RewriteCond %{HTTP_USER_AGENTupg1 [NC,OR]
  80. RewriteCond %{HTTP_USER_AGENTupsi [NC,OR]
  81. RewriteCond %{HTTP_USER_AGENTvk-[NC,OR]
  82. RewriteCond %{HTTP_USER_AGENTvoda [NC,OR]
  83. RewriteCond %{HTTP_USER_AGENTw3cs [NC,OR]
  84. RewriteCond %{HTTP_USER_AGENTwap- [NC,OR]
  85. RewriteCond %{HTTP_USER_AGENTwapa [NC,OR]
  86. RewriteCond %{HTTP_USER_AGENTwapi [NC,OR]
  87. RewriteCond %{HTTP_USER_AGENTwapp [NC,OR]
  88. RewriteCond %{HTTP_USER_AGENTwapr [NC,OR]
  89. RewriteCond %{HTTP_USER_AGENTwebc [NC,OR]
  90. RewriteCond %{HTTP_USER_AGENTwinw [NC,OR]
  91. RewriteCond %{HTTP_USER_AGENTwinw [NC,OR]
  92. RewriteCond %{HTTP_USER_AGENTxda [NC,OR]
  93. RewriteCond %{HTTP_USER_AGENTxda- [NC,OR]
  94. RewriteCond %{HTTP_USER_AGENTup.browser [NC,OR]
  95. RewriteCond %{HTTP_USER_AGENTup.link [NC,OR]
  96. RewriteCond %{HTTP_USER_AGENTwindows.ce [NC,OR]
  97. RewriteCond %{HTTP_USER_AGENTiemobile [NC,OR]
  98. RewriteCond %{HTTP_USER_AGENTmini [NC,OR]
  99. RewriteCond %{HTTP_USER_AGENTmmp [NC,OR]
  100. RewriteCond %{HTTP_USER_AGENTsymbian [NC,OR]
  101. RewriteCond %{HTTP_USER_AGENTmidp [NC,OR]
  102. RewriteCond %{HTTP_USER_AGENTwap [NC,OR]
  103. RewriteCond %{HTTP_USER_AGENTphone [NC,OR]
  104. RewriteCond %{HTTP_USER_AGENTipad [NC,OR]
  105. RewriteCond %{HTTP_USER_AGENTiphone [NC,OR]
  106. RewriteCond %{HTTP_USER_AGENTiPad [NC,OR]
  107. RewriteCond %{HTTP_USER_AGENTiPhone [NC,OR]
  108. RewriteCond %{HTTP_USER_AGENTipod [NC,OR]
  109. RewriteCond %{HTTP_USER_AGENTiPod [NC,OR]
  110. RewriteCond %{HTTP_USER_AGENTpocket [NC,OR]
  111. RewriteCond %{HTTP_USER_AGENTmobile [NC,OR]
  112. RewriteCond %{HTTP_USER_AGENTandroid [NC,OR]
  113. RewriteCond %{HTTP_USER_AGENTAndroid [NC,OR]
  114. RewriteCond %{HTTP_USER_AGENTpda [NC,OR]
  115. RewriteCond %{HTTP_USER_AGENTPPC [NC,OR]
  116. RewriteCond %{HTTP_USER_AGENTSeries60 [NC,OR]
  117. RewriteCond %{HTTP_USER_AGENTOpera.Mini [NC,OR]
  118. RewriteCond %{HTTP_USER_AGENTMoby [NC,OR]
  119. RewriteCond %{HTTP_USER_AGENTMobi [NC,OR]
  120.  
  121. # Проверить служебные заголовки, отсылаемые браузером
  122. RewriteCond %{HTTP_ACCEPT"text/vnd.wap.wml" [NC,OR]
  123. RewriteCond %{HTTP_ACCEPT"application/vnd.wap.xhtml+xml" [NC,OR]
  124.  
  125. # Проверить исключения
  126. RewriteCond %{HTTP_USER_AGENT} !windows.nt [NC]
  127. RewriteCond %{HTTP_USER_AGENT} !bsd [NC]
  128. RewriteCond %{HTTP_USER_AGENT} !x11 [NC]
  129. RewriteCond %{HTTP_USER_AGENT} !unix [NC]
  130. RewriteCond %{HTTP_USER_AGENT} !macos [NC]
  131. RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
  132. RewriteCond %{HTTP_USER_AGENT} !playstation [NC]
  133. RewriteCond %{HTTP_USER_AGENT} !google [NC]
  134. RewriteCond %{HTTP_USER_AGENT} !yandex [NC]
  135. RewriteCond %{HTTP_USER_AGENT} !bot [NC]
  136. RewriteCond %{HTTP_USER_AGENT} !libwww [NC]
  137. RewriteCond %{HTTP_USER_AGENT} !msn [NC]
  138. RewriteCond %{HTTP_USER_AGENT} !america [NC]
  139. RewriteCond %{HTTP_USER_AGENT} !avant [NC]
  140. RewriteCond %{HTTP_USER_AGENT} !download [NC]
  141. RewriteCond %{HTTP_USER_AGENT} !fdm [NC]
  142. RewriteCond %{HTTP_USER_AGENT} !maui [NC]
  143. RewriteCond %{HTTP_USER_AGENT} !webmoney [NC]
  144. RewriteCond %{HTTP_USER_AGENT} !windows-media-player [NC]
  145.  
  146. # При выполнении условий переадресация на мобильную версию сайта
  147. RewriteRule ^(.*)$ http://mobile.version.of.site.ru [L,R=302]
  148. </ifModule>
Как это все работает? На сервере обязательно должен быть включен модуль mod_rewrite, без него ничего не получится. Так что для надежности весь этот блок обернут в проверку наличия mod_rewrite у сервера Apache (в оригинальном коде этого не было). Дальше в модуле анализируется строка UserAgent браузера посетителя, в ней последовательно проверяется наличие подстроки, характерной для браузеров мобильных устройств. После этого проверяются специфические служебные заголовки, обычно отправляемые мобильными браузерами. Если хоть одно из этих условий выполнено, то следом выполняется дополнительная проверка на различные поисковые боты, а также некоторые другие сигнатуры, присущие стационарным браузерам или автоматическим модулям. Если и эта проверка пройдена удачно, то последней строчкой посетитель перенаправляется на мобильную версию сайта.

Читать статью целиком »
Просмотров: 11013 | Комментариев: 10

prev 01 ... 25 26 27 28 29 30 31 ... 42 next
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.1 сек. / MySQL: 2 (0.0028 сек.) / Память: 4.5 Mb
Наверх