За последние 24 часа нас посетили 24453 программиста и 1656 роботов. Сейчас ищут 954 программиста ...

Как выводить html-код

Тема в разделе "PHP для новичков", создана пользователем machetero, 2 янв 2017.

  1. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Вообщем у себя в блоге подключил Prism (это такая подсветка синтаксиса). Syntaxhighlighter и Highlight.js отказались работать. Пишу html-код внутри тегов pre и code, но он не выводиться, браузер его исполняет. В таких случаях надо заменять код на html-entities, каким нибудь preg_replace'ом ?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    только не preg_replace, а банальным htmlspecialchars :)
     
    Fell-x27 и machetero нравится это.
  3. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    только надо понять как в тексте заменить весь код на хтмл-сущности при этом оставив теги pre и code. кажется preg_replace всё-таки понадобится.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    безумие
     
  5. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Вообщем я начал искать вот так
    PHP:
    1. preg_match_all('#<pre>< code class="language-markup">(.*)</ code></pre>#',$_POST['text'],$matches);
    Он мне выдаёт пустой массив.
    В чём ошибка ?
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зачем ты ищешь?
     
  7. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Я хочу обработать html-код, который внутри тегов pre code, функцией htmlspecialchars. Иначе браузер исполняет этот код.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тогда почему ты сразу не передашь текст исходника в эту функцию? прям там, на странице.
     
  9. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Игорь, я когда пишу статью, пишу её с хтмл-тегами. И в базе она так храниться. Вот я теперь хочу перед тем как в базу заносить текст, сделать htmlspecialchars того, что внутри pre code. Мне на тостере подсказали использовать использовать DOMDocument , это наверно должно решить проблему. Но вот почему preg_match_all не работает, это загадка.
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Он работает, но не так, как тебе хотелось бы. Более того, есть вероятность, что ты сначала все обработал, перегнав в html-сущности, а потом пытаешься регуляркой проехаться, ища необработанные символы. Либо еще какая неочевидная мелочь.

    Потому что не надо регулярками парсить html, xml и прочие json-ы. И не будет никаких проблем.
    У меня вот, за все эти годы пока только один кейс набрался, где без регулярок ну никуда:
    1) Паттерны в HTML-инпутах. Ну просто потому, что там по спецификации должна быть регулярка. Иначе ты паттерн не опишешь.

    Еще, условно, можно дописать вторым пунктом:
    2) Хитровыбоенные селекторы в querySelector/all, тоже на стороне клиента.

    Да и то, этот второй пункт, на самом деле, в 90% случаев выполним без регулярок. И даже если регулярки юзаются,то они там уровня "начинается с %", "заканчивается на %", "содержит %". Простые как валенок. Если там нужно что-то сложное, значит у тебя серьезные проблемы, лежащие уровнем ниже.

    При этом на сервере работаю с XML, json, постоянно генерю кэш, хранящийся в виде php-файлов, на ходу их режу-перекраиваю, все работает, ничего не падает, нигде ни одной регулярки. Вообще. Все проблемы решаются грамотным проектированием и нативными средствами для работы со строками, которых в PHP, сам знаешь, столько, что из них можно китайскую стену построить.
     
    #10 Fell-x27, 3 янв 2017
    Последнее редактирование: 3 янв 2017
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну не делай так =)
     
  12. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    блин, DOMDocument у меня тоже не заработал. Подскажи, мне вообще не хранить разметку вместе с текстом. Тогда придётся изобретать бб-коды, как тут на форуме или что-то другое. Как-то на других ресурсах же реализовано хранение тегов, и кода внутри code.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    #13 igordata, 5 янв 2017
    Последнее редактирование модератором: 5 янв 2017
  14. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Товарищи, это чудо ! У меня заработала регулярка и всё получилось. Короче проблема была в том, что точка(метасимвол) по-умолчанию не соответствует переводу строки - символам \r\n. Чтобы .* захватывала и их, нужно писать s после разделителя, вот так #наша регулярка#s
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768