Подсветка кода с помощью стандартной функции PHP highlight_string


Содержание

Snip Code

Подсветка кода PHP

Если возникла необходимость вывести пользователю код PHP и при этом сделать подсветку кода («разукрасить код»), нам поможет функция highlight_string, которая возвращает PHP код с подсвеченным синтаксисом, используя цвета, определенные во встроенном обработчике подсветки синтаксиса PHP.

Решение

Внимание! $code=’ function error ( $type ) <
$error = «Error: Variable cannot be a» ;

if( in_array ( substr ( $type , 0 , 1 ),array( «a» , «e» , «i» , «o» , «u» , «x» )))
$error .= «n» ;
return ( $error . » » . $type . » type» );
>
?>

On-line подсветка кода PHP

Не забудьте, что код должен начинаться с открывающего тега » Если вы знаете более оригинальное, красивое, ЛУЧШЕЕ решение этой задачи, у вас есть шанс заработать 100 рублей. Если ваше решение будет признано лучшим, деньги ваши! Мы гарантируем выплату!

phpguru

Функция отличная только надо бы добавить для utf8 кодировку обработать строку, а то не все понимают как сделать подобное!
$str = iconv_strlen($str,’UTF-8′);
Я так считаю!
13-12-2013 в 12:59:38 ID# 454 посмотреть.

SnipCode.ru

Возможно Вы правы, непонятно только зачем тут iconv_strlen (((
13-12-2013 в 13:02:55 ID# 455 посмотреть.

Сергей

поторопился, так надо в конце, пардон.
return $v[‘pass’];
>
return FALSE;
>

02-12-2013 в 23:33:41 ID# 377 посмотреть.

Сергей

Думаю все же логичней использовать foreach, т.к. можно промахнуться с ключами, а если массив ассоциативный (я раньше делал ключ = дата и время регистрации), то вообще работать не будет.

function search($array,$login)
<
foreach ($array as $k=>$v)
if($v[‘login’] == $login) <
return $v[‘pass’];
>
>
return FALSE;
Так, на минутку.
Время исполнения смысла не имеет, авторизация используется 1 раз, если юзер не параноик)))

02-12-2013 в 23:33:41 ID# 376 посмотреть.

Пабло

Как сделана ваша система рейтинга,с учетом количеством людей,проголосовавших?
11-11-2013 в 17:04:39 ID# 207 посмотреть.

SnipCode.ru

ну. вобщем то все просто: берем общую оценку, делим на кол-во проголосовавших, получаем рейтинг
11-11-2013 в 17:07:06 ID# 208 посмотреть.

Пабло

Да,просто у меня возникли проблемы,при сохранении данных,в бд и отображение количество проголосовавших людей,у вас где нибудь на сайте описано как это сделано или будет?

Мне нужна система рейтинга точно такая же как у вас=)
11-11-2013 в 17:10:56 ID# 209 посмотреть.

KorniloFF

Приведенный код обрезает до первой точки в строке, в случае, если в ней будет их несколько, что не соответствует теме.
Вот код, обрезающий до последней точки:

Виктор

Все отлично работает! Извините , у меня есть задача отрезать после второй и до второй запятой , что нужно поправить в первом примере?
Спасибо!
30-09-2013 в 20:34:07 ID# 204 посмотреть.

46 человек и 55 роботов за 24ч
Online: 2 посетителя (15 мин.)
Добро пожаловать!

Подсветка кода

27.11.2020, 23:49

Подсветка PHP-кода не работает
подскажите в чем причина часть php кода стала гореть красным цветом с чем это связано и как это.

Подсветка активной страницы
Хочу создать хедер, который будет вставляться на страницу + должна автоматически подсвечиваться.

Подсветка найденного слова в тексте
Как реализовать подсветку найденного слова в тексте? Реализую с помощью функции preg_replace.

Подсветка числа в тексте регуляркой
Доброго времени суток! есть такая строка html

нужно как- то регуляркой.

Подсветка JS в документе PHP (Netbeans)
в общем потребовалось, чтобы js скрипт юзал пхп конфиг, не придумал ничего лучше чем обозвать.

7 малоизвестных, но очень полезных функций в PHP

В PHP есть куча встроенных функций, которые в том числе и вы прекрасно знаете. Однако среди них есть и такие, о которых вы даже не слышали. В этой статье мы рассмотрим несколько таких чудо-функций.

highlight_string()

Если вам нужно применить подсветку к PHP коду, который вы выводите на страницу, то функция highlight_string() это то, что вам нужно: на выходе вы получите стилизованную строку.

str_word_count()

Данная функция подсчитывает количество слов, входящих в строку.

levenshtein()

Вам нужно узнать насколько отличаются две строки? Функция levenshtein() поможет вам в этом.

get_defined_vars()

Данная функция возвращает многомерный массив, содержащий список всех определенных переменных, будь то переменные окружения, серверные переменные или переменные, определенные пользователем, в той области видимости, в которой была вызвана get_defined_vars().

escapeshellcmd()

escapeshellcmd() экранирует любые символы в строке, которые могут быть использованы для обмана шелл-команд при выполнении произвольных команд. Эта функция должна быть использована для того, чтобы убедиться, что любые данные, вводимые пользователем, экранированы перед передачей их функции exec() или system(), или оператору «обратный апостроф».

checkdate()

Функция для проверки даты.

php_strip_whitespace()

Возвращает PHP код, удалив из него все пробелы и комментарии.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://www.catswhocode.com/blog/7-little-known-but-super-useful-php-functions
Перевел: Станислав Протасевич
Урок создан: 12 Января 2014
Просмотров: 20972
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter


Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

WordPress. Плагин для подсветки php-кода

Давайте создадим плагин, который позволит подсвечивать php-код в записях блога. Для подсветки используем нативную php-функцию highlight_string() . Добавлять php-код в запись можно будет с помощью шорткода [php] . Практической ценности плагин не представляет, написан исключительно с целью изучения WordPress.

Главная трудность при реализии плагина — это автоматические замены. WordPress заменяет одинарные и двойные кавычки на лапки и елочки. И заменяет двойные и одинарные переводы строк на теги

Плагин для подсветки php-кода

Итак, создаем директорию highlight-php-code , а внутри нее — файл highlight-php-code.php :

‘ ; // убираем перевод строки, который добавляет highlight_string() $content = str_replace ( «\n» , » , $content ) ; return $content ; > ) ; /* * Функция wpautop заменяет переводы строк на теги

и
. И * это ломает код внутри шорткода [php]. Это происходит потому, * что функция wpautop выполняется раньше функции do_shortcode. * Поэтому сначала отключаем функцию wpautop для контента записи, * чтобы функция do_shortcode успела обработать шорткод [php], а * потом включаем ее снова. */ remove_filter ( ‘the_content’ , ‘wpautop’ ) ; add_filter ( ‘the_content’ , ‘wpautop’ , 99 ) ; /* * Запрещаем функцию wptexturize внутри шорткода [php], которая * заменяет одинарные и двойные кавычки на лапки и елочки, чтобы * эта функция не ломала php-код. */ add_filter ( ‘no_texturize_shortcodes’ , function ( $shortcodes ) < $shortcodes [ ] = 'php' ; return $shortcodes ; >) ;

Функция wpautop() заменяет двойной перенос строки на теги

, а одинарный — на тег
. По умолчанию применяется к следующим фильтрам:

Если нужно отключить этот фильтр у контента записи ( the_content ) или цитаты ( the_excerpt ), то добавляем в functions.php следующий код:

Функция wptexturize() изменяет некоторые символы в тексте на более правильные, читаемые и визуально привлекательные. Текст внутри HTML блоков

Подсветка кода

Иногда необходимо разместить код программы в сети Интернет, чтобы его можно было просмотреть с помощью браузера. Подсветку кода программы, разметки или чего-либо еще можно организовать несколькими способами, но для начала необходимо вообще понять, в чем состоит проблема? Казалось бы, нет ничего проще: вставляеш код программы в редактор сайта или в чистый HTML и получаеш результат, но не тут то было. В HTML игнорируются двойные пробелы: 2 или более пробела будут выглядеть как 1, перенос строки не работает, а если еще какая-либо часть кода будет заключена между символами «меньше» и «больше»: текст > , то этот текст вообще не будет отображен

Отображение кода с помощью HTML

Для решения этой проблеммы в HTML существует специальный дескриптор / XMP> . Например, вот так будет выглядеть текст HTML разметки, заключенный в дескриптор / XMP> :

К сожалению, этот тег хоть и поддерживается всеми популярными браузерами, но не входит ни в одну из спецификаций HTML. Код проходит валидацию только при переходном .

Существует еще 3 дискриптора HTML, которые могут помочь в вопросе вывода текста программы: PRE > / PRE > , CODE > / CODE > и

. PRE > / PRE > хоть и поддерживается всеми спецификациями HTML и практичесски всеми браузерами не поможет в выводе текста HTML разметки, а

— это вообще крайний случай. Более подробную информацию по этим тегам можно посмотреть в справочнике htmlbook.ru : , , и

Илон Маск рекомендует:  Что такое код imap_status

Отображение кода с помощью PHP

PHP располагает специальной функцией: highlight_string() , с помощью которой можно вывести на страницу код PHP скрипта. Выглядеть работа функции highlight_string() будет примерно так:

Ну а как быть, если нужно отобразить на web-странице текст скрипта написаного на Perl, структуру MySQL, разметку CSS или еще что-то? Разукрашивать код вручную — занятие, по меньшей мере, не благодарное, не говоря уже про кол-во времени, необходимое на такую работу. И тут на помощь прийдет класс GeSHi, написанный на PHP. Аббревиатура расшифровуется так: «Generic Syntax Highlighter».

Подсветка кода с помощью PHP класса GeSHi

Для начала работы необходимо скачать сам класс. С документацией (английский вариант) PHP класса GeSHi можно ознакомиться на официальном сайте: http://qbnz.com/highlighter . На этом же сайте можно в online-режиме протестировать работу этого скрипта. Все скрипты, опубликованные ниже, тестировались с версией GeSHi 1.0.8.10. Эта версия поддерживает 112 языков программирования, со писком которых можно ознакомиться тут: открыть список.

Файлы GeSHi нужно разместить на сервере и подключить к скрипту с помощью include или require : include_once ( ‘geshi/geshi.php’ ) . Директории docs и contrib желательно удалить, если класс будет использоваться на общедоступной машине. Далее записать в переменную $code текст скрипта, а в переменной $lang указать, каким образом подсвечивать код (названия языка программирования или др). Текст для переменной $lang — имена файлов (без .php) интерпритаторов, которые расположены в директории geshi/geshi/. Не нужные, на ваш взгляд интерпритаторы, также, стоит удалить из geshi/geshi/ для экономии дискового пространства сервера. Далее подключаем класс $geshi = new GeSHi ( $source , $language ) и выводим результат echo $geshi -> parse_code ( ) .

Сам класс имеет множество настроек, с которыми можно ознакомится в документации к нему. Ниже приведен пример реального использования GeSHi с кратким обзором по его наладке под свои нужды.

Обработка длинного кода с помощью GeSHi весьма ресурсоемкая процедура, поэтому не стоит парсить код «на лету», при выводе его клиенту. Лучше всего хранить обработанный код в кэше.

Функция geshi_highlight_code ( ) обрабатывает входящие данные, и выбирает все участки текста, заключенные в подобиие BB-кодов [hсode=php]. [/hсode], с последующей их подсветкой и возвратом результата. После знака равенства в [hсode=php] еще можно указать 2 параметра: # — нумерация строк кода и * — режим inline, который позволяет разместить подсвеченный код с окружающим его текстом в 1 строку. Сразу после знака # можно указать номер строки, с которой будет начинаться нумерация кода (например &#91hcode=#32css&#93), иначе нумерация пойдет с единицы.

В переменную $geshi_css_files , объявленную в начале функции hcode_filter_callback() глобальной, записываются данные о кол-ве вызовов функции, возможные ошибки записи файлов-стилей, и валидные названия языков программирования, поддерживаемые GeSHi. Поскольку данные из этой переменной будут доступны и за пределами функции, перебрав в цикле массив используемых языков программирования, можно записать их в БД.

Контейнер подcвечиваемого кода в GeSHi

Контейнер подсвечиваемого кода — теги HTML, обертывающие изменяемый GeSHi листинг скрипта. Задается он с помощью метода $geshi -> set_header_type ( $flag ) , где $flag — является константой. Константы флагов для метода $geshi -> set_header_type ( ) :

  • GESHI_HEADER_DIV — подсвечиваемый код и нумерация строк обертывается HTML-дескриптором div > . / div > . Все совмещенные пробелы преобразуются в сочетания пробелов и спец. HTML сущности . Например, 9 идущих подряд пробелов будут заменены на такой код: » «. Этот подход позволяет не беспокоиться о проблемах длинных строк, которые могли бы сильно растянуть страницу в ширину, вплоть до появления горизонтальной прокрутки. Преобразование символов табуляции (Tab) происходит в соответствии с методом $geshi -> set_tab_width ( $tabsize ) . Номера строк создаются при помощи HTML-тегов нумерованных списков. Отрицательные моменты при использовании этого контейнера: увеличение объема кода за счет HTML-мнемоник , тега перехода на новую строку br > и трудности, возникающие при копировании пронумерованного кода из окна браузера — в Internet Explorer и некоторых других код копируется вместе с номерами строк.
  • GESHI_HEADER_NONE — как следует из названия, вокруг подсвеченного кода теги не устанавливаются.
  • GESHI_HEADER_PRE — используется по умолчанию. Код заключается в HTML-тег pre > . / pre > . Таким образом, пробелы хранятся как есть, и код обработанный этим методом занимает меньше места, в сравнении с GESHI_HEADER_DIV. Минусы — номера строк кода отображаются при помощи нумерованного списка, что вызывает ошибку при прохождении проверки на соответствии страницы стандартам HTML.
  • GESHI_HEADER_PRE_TABLE — подсвечиваемый код обертывается в HTML-тег div > . / div > и используется таблица с двумя колонками в одной строке: одна колонка — для номеров строк, вторая — для текста кода. Содержимое первой и второй колонки, в свою очередь, заключается между дескрипторами pre > . / pre > , как и при использовании GESHI_HEADER_PRE. Код, подсвеченный с помощью GESHI_HEADER_PRE_TABLE успешно проходит проверку на соответствие стандартам HTML, но имеются некоторые проблемы с браузерами, построенными на движке Gecko: Firefox и другие.
  • GESHI_HEADER_PRE_VALID — с отключенным отображением номеров строк, код обертывается также, как и с использованием GESHI_HEADER_PRE. Но если строки пронумерованы — проверка на соответствие страницы стандартам HTML проходит без ошибок. Минусы — более «тяжелый» код на выходе, за счет использования дополнительных HTML-дескрипторов, в сравнении с GESHI_HEADER_PRE.

Нумерация строк GeSHi

Нумерация строк может производится с выбранного числа. Для этого необходимо указать число отсчета с помощью $geshi -> start_line_numbers_at ( $number ) . Нумерование строк по умолчанию отключено, и включается с помощью метода $geshi -> enable_line_numbers ( $flag ) . Существуют 3 флага, позволяющих видоизменить отображение номеров строк:

  • GESHI_NORMAL_LINE_NUMBERS — обычная нумерация;
  • GESHI_FANCY_LINE_NUMBERS — нумерация с подсветкой номера каждой 5-ой строки;
  • GESHI_NO_LINE_NUMBERS — выключение нумерации строк кода.

Для того, чтобы выделялся не каждый 5-ый номер, а, например, каждый 3, в методе $geshi -> enable_line_numbers ( ) существует 2-ой, дополнительный параметр, указываемый в виде числа. Запись

будет указывать классу на необходимость выделения каждого третего номера строки. Дополнительный параметр работает только в случае его использования с флагом GESHI_FANCY_LINE_NUMBERS, при использовании с другими флагами, он игнорируется.

Стилевые параметры номерам строк задаются с помощью метода $geshi -> set_line_style ( ‘color: #333;’ , ‘color: #ff00ff;’ ) . Второй параметр метода применяется только вместе с использованием флага GESHI_FANCY_LINE_NUMBERS и задает стилевое оформление подсвеченному номеру строки.

Стилевое оформление кода, подсвеченного с помощью GeSHi

По умолчанию GeSHi не использует классы CSS для оформления подсветки кода. Каждому тегу pre > , span > или div > присваивается свой цвет и другие параметры напрямую в HTML: div style = «color: red;» > . / div > . Это сделано для удобства первоночального запуска GeSHi. Но использование такого приема, без загрузки внешних фалов с разметкой CSS в приложениях с хорошей нагрузкой крайне не выгодно, так как расходуется больше трафика и используется больше места на диске для хранения CSS разметки. Да и стоит подумать о пользователях с медленным соединением с сетью! Чтобы включить поддержку CSS классов используется метод $geshi -> enable_classes ( ) (без параметров). При необходимости в дальнейшем снова отключить классы CSS, метод используется так: $geshi -> enable_classes ( false ) .

В документации GeSHi приводится пример, как генерировать CSS «на лету». Но поскольку обработка самого кода с помощью класса требует заметных серверных ресурсов, как говорилось выше, лучшим вариантом будет либо сгенерировать все подключаемые CSS файлы за 1 раз, либо же создавать их по мере необходимости, как это и реализовано в функции. Информация о том, какие CSS файлы необходимы для конкретной статьи, новости или сообщения форума сохраняется в отдельную БД, так как не в каждой же статье будет использоваться класс GeSHi.

CREATE TABLE `prefix _ article _ geshicss` (
`id` int ( 10 ) unsigned NOT NULL ,
`file _ css` text NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MyISAM ;

— Дамп данных таблицы `prefix_article_geshicss`

INSERT INTO `prefix _ article _ geshicss` ( `id` , `file _ css` ) VALUES
( 10 , ‘php,html4strict,javascript,html5’ ) ,
( 11 , ‘html4strict,php’ ) ;

Запись данных в БД лучше всего проводить за пределами функций, сразу после их запуска.

Обнаружение ошибок GeSHi

При использовании подобия BB-кодов обвертывания скриптов и генерации CSS файлов способом, приведенным выше, важно учитывать, что [hсode=. ] не всегда может содержать верное значение. Для обнаружения ошибок в функции hcode_filter_callback ( ) , используется метод $geshi_err = $geshi -> error ( ) , и в случае ее нахождения, язык подсветки устанавливается по умолчаию: $lang = ‘html4strict’ .

Ссылки на документацию из подсвечиваемого кода GeSHi.

Весьма интересными могут быть функциональные возможности GeSHi по добавлению ссылок на документацию. Это позволяет каждый HTML тег, имя функции PHP и т.д. превратить в ссылку, на раздел в соответствующей документации, например: . Более подробные свединия, кассательно применения этого метода можно посомотреть в документации на английском языке: » 3.11.3 Adding a Keyword Group » и » 3.13 Keyword URLs «. По умолчанию, ссылки на документацию включены, и для того, чтобы их отключить необходимо воспользоваться методом $geshi -> enable_keyword_links ( false ) . Отключать ссылки приходится лишь по тому, что они являются «прямыми». К примеру, 50 «прямых» индекcируемых ссылок на 4 различных домена будут весьма плохо влиять на восприятие сайта поисковыми системами, такими как Google или Yandex.


Список файлов поддерживаемых GeSHi языков

Проверку правильности указания пользователем названия необходимого языка программирования лучше всего осуществлять с помощью заранее созданного массива, так как эта проверка будет быстрее, чем с помощью вызова метода $geshi -> error ( ) .

Подсветка синтаксиса несколькими строками javascript

Да, я знаю, что такое синтаксический анализ. И знаю много разных библиотек для подсветки чего угодно. Только это всё не то, когда надо подсветить простенький примерчик, не содержащий всяких кодоизвращений. И уж совсем негоже тянуть для этого много-много байт _правильно_ разбирающих _любой_ код.

Для случаев без кодоизврата (а их большинство) можно использовать такой код:

Пример

Обратите внимание на баг в последней строке. Об этом разговор далее

Область применения, баги

Данный код заточен на javascript, о чём можно судить по ключевым словам. Сделать код понимающим любой Си-подобный язык не представляет труда.

Илон Маск рекомендует:  Iis управление памятью

Возиться с многострочными комментариями я не стал, как и с многострочными строками, ибо не так уж частно многострочные комменты используются в примерах, а к многострочным строкам в javascript я как-то не привык.

Еще чем плох данный подход — текст «плоский», то есть этот, с позволения сказать, анализатор, считает слово for внутри строки или комментария таким же ключевым словом, как и все их. Нас это не устраивает, поэтому используются css правила .str span и .comm span, дабы возложить на плечи CSS распознавание блочной структуры кода. Одна проблема возникает — когда строка содержит комментарий, который содержит ключевое слово или пользовательскую функцию. В этом случае мы не взирая на окончание строки всё считаем строкой (до символа перевода строки).

И ещё, двойных кавычек не существует. Можно добавить еще один replace:
Но меня от этого что-то удерживает.

highlight_string

(PHP 4, PHP 5, PHP 7)

highlight_string — Syntax highlighting of a string

Description

Outputs or returns html markup for a syntax highlighted version of the given PHP code using the colors defined in the built-in syntax highlighter for PHP.

Parameters

The PHP code to be highlighted. This should include the opening tag.

Set this parameter to TRUE to make this function return the highlighted code.

Return Values

If return is set to TRUE , returns the highlighted code as a string instead of printing it out. Otherwise, it will return TRUE on success, FALSE on failure.

Examples

Example #1 highlight_string() example

The above example will output:

Notes

When the return parameter is used, this function uses internal output buffering so it cannot be used ins >ob_start() callback function.

The HTML markup generated is subject to change.

See Also

User Contributed Notes 28 notes

You can change the colors of the highlighting, like this:

( «highlight.comment» , «#008000» );
ini_set ( «highlight.default» , «#000000» );
ini_set ( «highlight.html» , «#808080» );
ini_set ( «highlight.keyword» , «#0000BB; font-weight: bold» );
ini_set ( «highlight.string» , «#DD0000» );
?>

Like you see in the example above, you can even add additional styles like bold text, since the values are set directly to the DOM attribute «style».

Also, this function highlights only text, if it begins with the prefix » function highlightText ( $text )
<
$text = trim ( $text );
$text = highlight_string ( » . $text , true ); // highlight_string() requires opening PHP tag or otherwise it will not colorize the text
$text = trim ( $text );
$text = preg_replace ( «|^\\ \\ |» , «» , $text , 1 ); // remove prefix
$text = preg_replace ( «|\\ \$|» , «» , $text , 1 ); // remove suffix 1
$text = trim ( $text ); // remove line breaks
$text = preg_replace ( «|\\ \$|» , «» , $text , 1 ); // remove suffix 2
$text = trim ( $text ); // remove line breaks
$text = preg_replace ( «|^(\\ )( )|» , «\$1\$3\$4″ , $text ); // remove custom added » return $text ;
>
?>

Note, that it will remove the tag too, so you get the formatted text directly, which gives you more freedom to work with the result.

I personally suggest to combine both things to have a nice highlighting function for different file types with different highlight coloring sets:

function highlightText ( $text , $fileExt = «» )
<
if ( $fileExt == «php» )
<
ini_set ( «highlight.comment» , «#008000» );
ini_set ( «highlight.default» , «#000000» );
ini_set ( «highlight.html» , «#808080» );
ini_set ( «highlight.keyword» , «#0000BB; font-weight: bold» );
ini_set ( «highlight.string» , «#DD0000» );
>
else if ( $fileExt == «html» )
<
ini_set ( «highlight.comment» , «green» );
ini_set ( «highlight.default» , «#CC0000» );
ini_set ( «highlight.html» , «#000000» );
ini_set ( «highlight.keyword» , «black; font-weight: bold» );
ini_set ( «highlight.string» , «#0000FF» );
>
// .

$text = trim ( $text );
$text = highlight_string ( » . $text , true ); // highlight_string() requires opening PHP tag or otherwise it will not colorize the text
$text = trim ( $text );
$text = preg_replace ( «|^\\ \\ |» , «» , $text , 1 ); // remove prefix
$text = preg_replace ( «|\\ \$|» , «» , $text , 1 ); // remove suffix 1
$text = trim ( $text ); // remove line breaks
$text = preg_replace ( «|\\ \$|» , «» , $text , 1 ); // remove suffix 2
$text = trim ( $text ); // remove line breaks
$text = preg_replace ( «|^(\\ )( )|» , «\$1\$3\$4″ , $text ); // remove custom added » return $text ;
>
?>

This function will return highlighted, xhtml 1.1 valid code (replaces with elements and color with style attributes):

function xhtml_highlight ( $str ) <
$str = highlight_string ( $str , true );
//replace
$str = preg_replace ( ‘# ([^\’]*) #’ , ‘ \\2 ‘ , $str );
//replace other elements
return preg_replace ( ‘# ([^\’]*) #U’ , ‘ \\2 ‘ , $str );
>

When you quote highlighted PHP code in your website you need to escape quotes. If you quote a lot it may be annoyning. Here is tiny snippet how to make quoting tidy and clean. Write your code like this:

$string = ‘Here I put my code’;

And somewhere else define the function:

I’ve been working on a good replacement for the highlight_string() function; and here is what I’ve come up with so far:

‘ ‘style=»color: ‘,
‘ ‘ => ‘ ‘,
‘ ‘ => »,
‘ ‘ => »,
‘ ‘ =>
‘ ‘
);
foreach ($replace as $html => $xhtml) <
$str = str_replace($html, $xhtml, $str);
>
// delete the first and the corresponding
$str = substr($str, 30, -9);

$arr_html = explode(‘
‘, $str);
$total_lines = count($arr_html);
$out = »;
$line_counter = 0;
$last_line_num = $first_line_num + $total_lines;

foreach ($arr_html as $line) <
$line = str_replace(chr(13), », $line);
$current_line = $first_line_num + $line_counter;
if ($counting) <
$out .= ‘ ‘
. str_repeat(‘ ‘, strlen($last_line_num) — strlen($current_line))
. $current_line
. ‘: ‘;
>
$out .= $line
. ‘
‘.»\n»;
$line_counter++;
>
$out = ‘ ‘.»\n».$out.’ .»\n»‘;

This function outputs valid XHTML 1.1 code by replacing font tags with span tags. You can also specify whether you want it to return or echo, output a line-count, the color of the line-count, and the starting line-count number.

Alternative XML syntax highlighting.

function xml_highlight ( $s )
<
$s = htmlspecialchars ( $s );
$s = preg_replace ( «# #sU» ,
» » , $s );
$s = preg_replace ( «# #sU» ,
» » , $s );
$s = preg_replace ( «# )#iU» ,
» \\1\\2 \\3″ , $s );
$s = preg_replace ( «# #iU» ,
» \\2 \\3>» , $s );
$s = preg_replace ( «#([^\s]*?)\=(«|’)(.*)(«|’)#isU» ,
» \\1 = \\2\\3\\4 » , $s );
$s = preg_replace ( «# #isU» ,
» \\2\\3\\4 >» , $s );
return nl2br ( $s );
>
?>

to vouksh: I expanded your functions a bit:

function xhtmlHighlightString ( $str , $return = false ) <
$hlt = highlight_string ( stripslashes ( $str ), true );
$fon = str_replace (array( ‘ , ‘ ‘ ), array( ‘ , ‘ ‘ ), $hlt );
$ret = preg_replace ( ‘#color=»(.*?)»#’ , ‘style=»color: \\1″‘ , $fon );
if( $return )
return $ret ;
echo $ret ;
return true ;
>
function xhtmlHighlightFile ( $path , $return = false ) <
$hlt = highlight_file ( $path , true );
$fon = str_replace (array( ‘ , ‘ ‘ ), array( ‘ , ‘ ‘ ), $hlt );
$ret = preg_replace ( ‘#color=»(.*?)»#’ , ‘style=»color: \\1″‘ , $fon );
if( $return )
return $ret ;
echo $ret ;
return true ;
>
?>

I didn’t get the expected results from the other XHTML_highlight function, so I developed my own and it is much more efficient. The older one uses a preg_replace to replace the contents of the tag to within a span tag. The only preg_replace in my function pulls the color attribute, and puts it within a str_replace’d span tag.

function xhtml_highlight ( $str ) <
$str = highlight_string ( $str , true );
$str = str_replace (array( ‘ , ‘ ‘ ), array( ‘ , ‘ ‘ ), $str );
return preg_replace ( ‘#color=»(.*?)»#’ , ‘style=»color: \\1″‘ , $str );
>

Here is an improved version of Dimitry’s xml_highlight function.
I fixed a bug which replaced the first character of the tags name,
and added a line to replace the tabs and spaces with
non-breaking space symbols to keep the identation.

|isU», «[1] [/1]», $s);
$s = preg_replace(«| |isU», «[1] [/1]», $s);
$s = preg_replace(«| |isU»,»[3] [/3]», $s);
$s = preg_replace(«|\=\»(.*)\»|isU», «[6]=[/6][4]\»\\1\»[/4]»,$s);
$s = htmlspecialchars($s);
$s = str_replace(«\t»,» «,$s);
$s = str_replace(» «,» «,$s);
$replace = array(1=>’0000FF’, 2=>’0000FF’, 3=>’800000′, 4=>’FF00FF’, 5=>’FF0000′, 6=>’0000FF’);
foreach($replace as $k=>$v) <
$s = preg_replace(«|\[«.$k.»\](.*)\[/».$k.»\]|isU», » \\1 «, $s);
>

Concerning my code below:

I’m sorry, I completely forgot about str_ireplace being for PHP 5 for some reason. Also, there was another error I missed (too many late nights ;)). Here’s the corrected code:

function highlight_code ( $code , $inline = false , $return = false ) // Pre php 4 support for capturing highlight
<
(string) $highlight = «» ;
if ( version_compare ( PHP_VERSION , «4.2.0» , » ) === 1 )
<
ob_start (); // start output buffering to capture contents of highlight
highlight_string ( $code );
$highlight = ob_get_contents (); // capture output
ob_end_clean (); // clear buffer cleanly
>
else
<
$highlight = highlight_string ( $code , true );
>

# Using preg_replace will allow PHP 4 in on the fun
if ( $inline === true )
$highlight = preg_replace ( «/ /i» , » » , $highlight );
else
$highlight = preg_replace ( «/ /i» , » » , $highlight );

if ( $return === true )
<
return $highlight ;
>
else
<
echo $highlight ;
>
>
?>

Here is an improved version of the code highlighter w/ linenumbers from ‘vanessaschissato at gmail dot com’ — http://nl.php.net/manual/en/function.highlight-string.php#70456


function printCode ( $source_code )
<

if ( is_array ( $source_code ))
return false ;

$source_code = explode ( «\n» , str_replace (array( «\r\n» , «\r» ), «\n» , $source_code ));
$line_count = 1 ;

foreach ( $source_code as $code_line )
<
$formatted_code .= ‘

‘ . $line_count . ‘

‘ ;
$line_count ++;

if ( ereg ( ‘ , $code_line ))
$formatted_code .= ‘

‘ . str_replace (array( ‘ ‘ , ‘ ‘ ), » , highlight_string ( $code_line , true )). ‘

‘ ;
else
$formatted_code .= ‘

‘ . ereg_replace ( ‘( , » , str_replace (array( ‘ ‘ , ‘ ‘ ), » , highlight_string ( ‘ . $code_line , true ))). ‘

‘ ;
>

return ‘

‘ . $formatted_code . ‘

‘ ;
>

This fonction replaces every space with the html code (non-breaking space)
this is not very good because text will not go to the line and causes a big width
for example in a bordered div, text will go across the border

Илон Маск рекомендует:  Принципы написания заголовков

my solution :
echo str_replace(» «, » «,highlight_string(«Arise, you children of the fatherland»,true));
echo str_replace(» «, » «,highlight_file(«test.php»,true));

I read the note from «stanislav dot eckert at vizson dot de» and I really enjoyed the function he created.
For my use I made some adaptations leaving the function more practical and allowing the passage and multiple parameters at a time, I also modified the style of the element with a black background and margins.

// Combined of the highlight_string and var_export
function hl_export ()
<
try <
ini_set ( «highlight.comment» , «#008000» );
ini_set ( «highlight.default» , «#FFFFFF» );
ini_set ( «highlight.html» , «#808080» );
ini_set ( «highlight.keyword» , «#0099FF; font-weight: bold» );
ini_set ( «highlight.string» , «#99FF99» );

foreach ( $vars as $var ) <
$output = var_export ( $var , true );
$output = trim ( $output );
$output = highlight_string ( » . $output , true ); // highlight_string() requires opening PHP tag or otherwise it will not colorize the text
$output = preg_replace ( «|\\ |» , » » , $output , 1 ); // edit prefix
$output = preg_replace ( «|(\\ )( )|» , «\$1\$3\$4″ , $output ); // remove custom added » echo $output ;
>
> catch ( Exception $e ) <
echo $e -> getMessage ();
>
>

// Debug multiple vars at once.
$var1 = ‘Example String’ ;
$var2 = 1987 ;
$var3 = null ;
$var4 = true ;
$var5 = array( ‘Array’ , ’05’ , 05 , false , null );

hl_export ( $var1 , $var2 , $var3 , $var4 , $var5 );
?>

I wanted to build a better function and exclude operators <>=- from keywords span class. I also wanted to link functions used in my PHP code directly to the PHP site.
A lot more changes and tweaks have been made and the output is much better!

Find the function here :
http://www.tellinya.com/art2/262/highligh-php-syntax/
and ditch the old PHP one permanently.
Tested and built on PHP 5.2.0.

Looking forward to any input.

Fully working, XHTML 1.1 ready xhtml_highlight function. I included the stripslashes, because of some problems I had with out it. It should be safe to leave it in there, but if you experience problems, feel free to take it out.

‘), array(‘ ‘), $hlt);
$ret = preg_replace(‘#color=»(.*?)»#’, ‘style=»color: \\1″‘, $fon);
echo $ret;
return true;
>
?>

On dleavitt AT ucsc DOT edu’s comment:

You might want to use md5($html_string) instead of «piggusmaloy» as a generally good programming practice. Just in case «piggusmaloy» is actually in $html_string.

A neat function I made. Syntax coloring, row numbers, varying background colors per row in the table.

$i \t$row

«;
>

if($i!=1) <
if(is_int($i/2)) <
$row_num[] = »

$i \t$row

«;
> else <
$row_num[] = »

$i \t$row

«;
>
>

This is a little function for highlighting bbcode-stylish PHP code from a mysql database.
(Like this: [php] echo «test» ; ?> [/php])

function bbcode ( $s )
<
$s = str_replace ( «]\n» , «]» , $s );
$match = array( ‘#\[php\](.*?)\[\/php\]#se’ );
$replace = array( «‘

Well, Just a little something I wrote which highlights an HTML code. It’ll be going through many changes in the next few days. until then =) enjoy

class HTMLcolorizer <
private $pointer = 0 ; //Cursor position.
private $content = null ; //content of document.
private $colorized = null ;
function __construct ( $content ) <
$this -> content = $content ;
>
function colorComment ( $position ) <
$buffer = » » ;
for( $position += 1 ; $position strlen ( $this -> content ) && $this -> content [ $position ] != «>» ; $position ++) <
$buffer .= $this -> content [ $position ];
>
$buffer .= » >» ;
$this -> colorized .= $buffer ;
return $position ;
>
function colorTag ( $position ) <
$buffer = » » ;
$coloredTagName = false ;
//As long as we’re in the tag scope
for( $position += 1 ; $position strlen ( $this -> content ) && $this -> content [ $position ] != «>» ; $position ++) <
if( $this -> content [ $position ] == » » && ! $coloredTagName ) <
$coloredTagName = true ;
$buffer .= » » ;
>else if( $this -> content [ $position ] != » » && $coloredTagName ) <
//Expect attribute
$attribute = «» ;
//While we’re in the tag
for(; $position strlen ( $this -> content ) && $this -> content [ $position ] != «>» ; $position ++) <
if( $this -> content [ $position ] != «=» ) <
$attribute .= $this -> content [ $position ];
>else <
$value = «» ;
$buffer .= » » . $attribute . » =» ;
$attribute = «» ; //initialize it
$inQuote = false ;
$QuoteType = null ;
for( $position += 1 ; $position strlen ( $this -> content ) && $this -> content [ $position ] != «>» && $this -> content [ $position ] != » » ; $position ++) <
if( $this -> content [ $position ] == ‘»‘ || $this -> content [ $position ] == «‘» ) <
$inQuote = true ;
$QuoteType = $this -> content [ $position ];
$value .= $QuoteType ;
//Read Until next quotation mark.
for( $position += 1 ; $position strlen ( $this -> content ) && $this -> content [ $position ] != «>» && $this -> content [ $position ] != $QuoteType ; $position ++) <
$value .= $this -> content [ $position ];
>
$value .= $QuoteType ;
>else < //No Quotation marks.
$value .= $this -> content [ $position ];
>
>
$buffer .= » » . $value . » » ;
break;
>

>
//In case there were no attributes.
if( $this -> content [ $position ] == «>» && ! $coloredTagName ) <
$buffer .= » >» ;
$position ++;
>
$this -> colorized .= $buffer ;
return — $position ;
>
function colorize () <
$this -> colorized = «» ;
$inTag = false ;
for( $pointer = 0 ; $pointer strlen ( $this -> content ); $pointer ++) <
$thisChar = $this -> content [ $pointer ];
$nextChar = $this -> content [ $pointer + 1 ];
if( $thisChar == » ) <
if( $nextChar == «!» ) <
$pointer = $this -> colorComment ( $pointer );
>else if( $nextChar == «?» ) <
//colorPHP();
>else <
$pointer = $this -> colorTag ( $pointer );
>
>else <
$this -> colorized .= $this -> content [ $pointer ];
>
>
return $this -> colorized ;
>
>
$curDocName = $_REQUEST [ ‘doc’ ];
$docHandle = fopen ( $curDocName , «r» );
$docStrContent = fread ( $docHandle , filesize ( $curDocName ));
fclose ( $docHandle );
$HTMLinspector = new HTMLcolorizer ( $docStrContent );
$document = $HTMLinspector -> colorize ();
?>

Подсветка кода

27.11.2020, 23:49

Подсветка PHP-кода не работает
подскажите в чем причина часть php кода стала гореть красным цветом с чем это связано и как это.

Подсветка активной страницы
Хочу создать хедер, который будет вставляться на страницу + должна автоматически подсвечиваться.

Подсветка найденного слова в тексте
Как реализовать подсветку найденного слова в тексте? Реализую с помощью функции preg_replace.

Подсветка числа в тексте регуляркой
Доброго времени суток! есть такая строка html

нужно как- то регуляркой.

Подсветка JS в документе PHP (Netbeans)
в общем потребовалось, чтобы js скрипт юзал пхп конфиг, не придумал ничего лучше чем обозвать.

WordPress. Плагин для подсветки php-кода

Давайте создадим плагин, который позволит подсвечивать php-код в записях блога. Для подсветки используем нативную php-функцию highlight_string() . Добавлять php-код в запись можно будет с помощью шорткода [php] . Практической ценности плагин не представляет, написан исключительно с целью изучения WordPress.

Главная трудность при реализии плагина — это автоматические замены. WordPress заменяет одинарные и двойные кавычки на лапки и елочки. И заменяет двойные и одинарные переводы строк на теги

Плагин для подсветки php-кода

Итак, создаем директорию highlight-php-code , а внутри нее — файл highlight-php-code.php :

‘ ; // убираем перевод строки, который добавляет highlight_string() $content = str_replace ( «\n» , » , $content ) ; return $content ; > ) ; /* * Функция wpautop заменяет переводы строк на теги

и
. И * это ломает код внутри шорткода [php]. Это происходит потому, * что функция wpautop выполняется раньше функции do_shortcode. * Поэтому сначала отключаем функцию wpautop для контента записи, * чтобы функция do_shortcode успела обработать шорткод [php], а * потом включаем ее снова. */ remove_filter ( ‘the_content’ , ‘wpautop’ ) ; add_filter ( ‘the_content’ , ‘wpautop’ , 99 ) ; /* * Запрещаем функцию wptexturize внутри шорткода [php], которая * заменяет одинарные и двойные кавычки на лапки и елочки, чтобы * эта функция не ломала php-код. */ add_filter ( ‘no_texturize_shortcodes’ , function ( $shortcodes ) < $shortcodes [ ] = 'php' ; return $shortcodes ; >) ;

Функция wpautop() заменяет двойной перенос строки на теги

, а одинарный — на тег
. По умолчанию применяется к следующим фильтрам:

Если нужно отключить этот фильтр у контента записи ( the_content ) или цитаты ( the_excerpt ), то добавляем в functions.php следующий код:

Функция wptexturize() изменяет некоторые символы в тексте на более правильные, читаемые и визуально привлекательные. Текст внутри HTML блоков

Подсветка синтаксиса кода PHP

Постановка задачи

Итак, мы имеем некий контент в базе данных, в котором есть листинги кода. Для лучшей читаемости, листинги кода необходимо подсветить перед тем, как выводить их в браузер. Необходимо учесть, что контент содержит как обычный текст, так и код, который необходимо подсветить. И еще одно условие: листингов кода в контенте может быть несколько.

Решение

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

Алгоритм работы программы может быть следующий:

  1. Читаем нашу исходную строку до тега, в котором по договоренности находится код, который необходимо подсветить, вырезаем эту часть строки, и сохраняем ее в переменную;
  2. Читаем строку дальше, сохраняем во вторую переменную часть строки между нашими тегами — это то, что необходимо подсветить;
  3. Читаем еще дальше, сохраняем в третью переменную часть строки от окончания кода и до конца исходной строки, проверям, есть ли еще код в оставшейся строке, и если есть, то делаем рекурсивный вызов нашей функции.
  4. Если кода больше нет, то выводим все в браузер.

В качестве примера, возьмем тег «code» и поместим внутри него, например такой код:

А вот собственно и сама функция подсветки синтаксиса кода:

Присвоим переменной «$str» в качестве значения нашу строку и вызовем функцию подсветки синтаксиса:

В результате получим:

В коде есть подробные комментарии, поэтому особых вопросов возникнуть не должно.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL