Вообщем у себя в блоге подключил Prism (это такая подсветка синтаксиса). Syntaxhighlighter и Highlight.js отказались работать. Пишу html-код внутри тегов pre и code, но он не выводиться, браузер его исполняет. В таких случаях надо заменять код на html-entities, каким нибудь preg_replace'ом ?
только надо понять как в тексте заменить весь код на хтмл-сущности при этом оставив теги pre и code. кажется preg_replace всё-таки понадобится.
Вообщем я начал искать вот так PHP: preg_match_all('#<pre>< code class="language-markup">(.*)</ code></pre>#',$_POST['text'],$matches); Он мне выдаёт пустой массив. В чём ошибка ?
Я хочу обработать html-код, который внутри тегов pre code, функцией htmlspecialchars. Иначе браузер исполняет этот код.
Игорь, я когда пишу статью, пишу её с хтмл-тегами. И в базе она так храниться. Вот я теперь хочу перед тем как в базу заносить текст, сделать htmlspecialchars того, что внутри pre code. Мне на тостере подсказали использовать использовать DOMDocument , это наверно должно решить проблему. Но вот почему preg_match_all не работает, это загадка.
Он работает, но не так, как тебе хотелось бы. Более того, есть вероятность, что ты сначала все обработал, перегнав в html-сущности, а потом пытаешься регуляркой проехаться, ища необработанные символы. Либо еще какая неочевидная мелочь. Потому что не надо регулярками парсить html, xml и прочие json-ы. И не будет никаких проблем. У меня вот, за все эти годы пока только один кейс набрался, где без регулярок ну никуда: 1) Паттерны в HTML-инпутах. Ну просто потому, что там по спецификации должна быть регулярка. Иначе ты паттерн не опишешь. Еще, условно, можно дописать вторым пунктом: 2) Хитровыбоенные селекторы в querySelector/all, тоже на стороне клиента. Да и то, этот второй пункт, на самом деле, в 90% случаев выполним без регулярок. И даже если регулярки юзаются,то они там уровня "начинается с %", "заканчивается на %", "содержит %". Простые как валенок. Если там нужно что-то сложное, значит у тебя серьезные проблемы, лежащие уровнем ниже. При этом на сервере работаю с XML, json, постоянно генерю кэш, хранящийся в виде php-файлов, на ходу их режу-перекраиваю, все работает, ничего не падает, нигде ни одной регулярки. Вообще. Все проблемы решаются грамотным проектированием и нативными средствами для работы со строками, которых в PHP, сам знаешь, столько, что из них можно китайскую стену построить.
блин, DOMDocument у меня тоже не заработал. Подскажи, мне вообще не хранить разметку вместе с текстом. Тогда придётся изобретать бб-коды, как тут на форуме или что-то другое. Как-то на других ресурсах же реализовано хранение тегов, и кода внутри code.
Товарищи, это чудо ! У меня заработала регулярка и всё получилось. Короче проблема была в том, что точка(метасимвол) по-умолчанию не соответствует переводу строки - символам \r\n. Чтобы .* захватывала и их, нужно писать s после разделителя, вот так #наша регулярка#s