2013-03-14 2 views
3

Я использую предварительные теги для отображения кодов на моем сайте, эти фрагменты содержат html и php.Предотвращение php от рендеринга/выполнения между предварительными тегами

До сих пор я использовал JQuery для преобразования html в codenippets в обычный текст, но теги php все еще выполняются.

код, который я использовал для преобразования HTML содержимого предварительно тега текста:

$(document).ready(function(){ 
    $("pre").text($("pre").html()); 
}); 

Пример того, что я использую его:

<pre> 
    <p>paragraph Content</p> 
    <h1>html code</h1> 
    <?php echo "this is php example code"; ?> 
</pre> 

Первую 2 строки отображаются в браузере с тегами и все отлично, но третья строка выполняет рендеринг php-тегов только этот код примера php. Может ли кто-нибудь помочь мне, чтобы я мог отображать теги php в своем фрагменте кода?

Также, если кто-то знает лучшее решение для рендеринга html/css и php в качестве фрагмента кода на вашем сайте Это было бы очень полезно.

+1

В идеале вы можете настроить что-то вроде syntaxhighlighter (http://alexgorbatchev.com/SyntaxHighlighter/), который дает пользователю больше, чем просто строку, и вам не нужно делать какие-либо форматирование самостоятельно. – apelsinapa

+0

Планирование использования, но все же не убирает тот факт, что при вводе php-тега внутри pre-тэгов этого SyntaxHighlighter он запускается вместо отображения в виде обычного текста. –

+0

Ну, если вы планируете отображать код, это довольно избыточно, чтобы открывать и закрывать теги для php, особенно если его просто фрагменты ...Если вы действительно хотите сохранить их, несколько ppl уже предоставили ответ =) – apelsinapa

ответ

2

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

Вы должны обработать Ваш выход, перед отправкой его клиенту и получать все вхождения <pre> и </pre> заменить все < и > между ними с их HTML сущностями.

Посмотрите на this question, чтобы узнать лучший подход к анализу HTML и получить соответствующие элементы для их изменения.

+0

Это похоже на один из лучших ответов, и это то, чего я уже боялся. Это намного глубже, чем мои текущие знания, так как я почти ничего не знаю о разборе html. Конечный объект, имеющий похожие фрагменты, как на net.tutplus.com, должен быть более простым способом обойти все это. –

+1

Простейшим решением, вероятно, было бы поместить фрагмент кода в переменную (возможно, прочитав ее из файла), а затем запустите ее через 'htmlspecialchars()' перед ее выходом. Это будет работать легко, реалистично и без анализа HTML. Если вам нужно или нужно встроить фрагменты в страницу, не распаковывая их в отдельные файлы, разбор HTML, вероятно, будет вашим единственным вариантом. –

2

Вы должны избежать < и > символов - заменить их с HTML-сущностями, &lt; и &gt; соответственно;)

Если вы хотите полное и всеобъемлющее преобразование в HTML сущности, попробуйте преобразовать его в каком http://centricle.com/tools/html-entities

Как правило, хорошей практикой является преобразование всех символов в соответствующие объекты HTML в кодовом блоке.

+1

Нет необходимости в отдельном инструменте для преобразования HTML-объектов, вы можете просто повторить результат «htmlentities» PHP. –

+0

Да, это тоже. Забыл, что OP запускает PHP-скрипт на первом месте;) – Terry

1

Попробуйте заменить <?php ... ?> с

&lt;? .... &gt;

1
<pre> 
    &lt;p&gt;paragraph Content&lt;/p&gt; 
    &lt;h1&gt;html code&lt;/h1&gt; 
    &lt;?php echo "this is php example code"; ?&gt; 
</pre> 

Вот JSFiddle example, так что вы можете увидеть, как он делает на этой странице.

+0

Это прекрасно работает, но его нужно автоматизировать. –

+1

Как вы используете PHP, вы всегда можете передать его через функцию «htmlentities» PHP. Это будет кодировать вход, как указано выше. Размещение '' на странице PHP увидит PHP, показывая контент * до того, как будет выполнен JavaScript. Кроме того, использование JavaScript для кодирования HTML было бы плохой идеей, так как те, у кого отключен JavaScript, в конечном итоге видят действительно грязный веб-сайт. –

+0

Спасибо, на самом деле не думал об этом, я ищу способ автоматически сделать это, когда у меня есть pre tag. Я не хочу каждый раз выписывать функцию htmlentities и вводить данные из pre, но в ней. –

Смежные вопросы