【问题标题】:Prevent php from rendering/executing between pre tags防止php在pre标签之间渲染/执行
【发布时间】:2013-03-14 09:35:00
【问题描述】:

我正在使用pre标签在我的网站上显示coden-ps,这些sn-ps包含html和php。

到目前为止,我已经使用Jquery将coden-ps中的html转换为纯文本,但是php标签仍在执行中。

我用于将pre标签的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>

前两行在浏览器中显示标签和一切完美,但第三行执行 php 标签只呈现 this php example code。谁能帮助我,以便我也可以在我的代码 sn-p 中显示 php 标签?

另外,如果有人知道在您的网站上将 html/css 和 php 呈现为代码 sn-p 的更好解决方案,那将非常有帮助。

【问题讨论】:

  • 理想情况下,您可以设置类似 syntaxhighlighter (alexgorbatchev.com/SyntaxHighlighter) 之类的东西,它为用户提供的不仅仅是一行,而且您不必自己进行任何格式化。
  • 计划使用它,但仍然没有消除这样一个事实,即当我在该 SyntaxHighlighter 的 pre 标签内输入 php 标签时,它正在运行而不是显示为纯文本。
  • 好吧,如果您打算显示代码,那么使用 php 的开始和结束标记是非常多余的,尤其是如果它只是 sn-ps... 如果您真的想保留它们几个 ppl已经给出了答案=)
  • 不完全是因为我知道如何在 HTML 中显示 PHP 代码,但我想在我网站上的任何地方自动完成 pre 标记的内容。

标签: php javascript jquery html rendering


【解决方案1】:

您的方法的问题是,您试图在浏览器处理完文件后影响渲染。当您查看页面的源代码时,您会注意到其中除了“this php example code”之外真的没有别的东西,因为服务器解析了您的代码的那部分并执行了它,这只会导致您得到的字符串放入echo 命令。

您需要在将输出发送到客户端之前处理您的输出并获取所有出现的&lt;pre&gt;&lt;/pre&gt; 以将它们之间的所有&lt;&gt; 替换为各自的HTML 实体。

查看this question,找出解析 HTML 并获取适当元素以便修改它们的最佳方法。

【讨论】:

  • 这看起来是更好的答案之一,这也是我一直害怕的。这比我目前的知识要深得多,因为我对解析 html 几乎一无所知。具有与 net.tutplus.com 上类似的 sn-ps 的最终目标应该是解决所有这些问题的更简单方法。
  • 最简单的解决方案可能是将代码 sn-p 放入变量中(可能通过从文件中读取),然后在输出之前通过htmlspecialchars() 运行它。这将很容易、可靠且无需 HTML 解析。如果您想要或需要将 sn-ps 嵌入页面而不将它们提取到单独的文件中,那么 HTML 解析可能是您唯一的选择。
【解决方案2】:

您应该转义 &amp;lt;&amp;gt; 符号 - 将它们分别替换为它们的 HTML 实体 &amp;lt;&amp;gt; ;)

如果您想要全面而全面地转换为 HTML 实体,请尝试在 http://centricle.com/tools/html-entities 上转换它们

一般来说,将所有符号转换为代码块中各自的 HTML 实体是一种很好的做法。

【讨论】:

  • 不需要单独的工具来转换 HTML 实体,您可以直接回显 PHP 的 htmlentities 的结果。
  • 是的,也是。忘记了OP首先运行的是PHP脚本;)
【解决方案3】:

尝试将&lt;?php ... ?&gt;替换为

&amp;lt;? .... &amp;gt;

【讨论】:

    【解决方案4】:
    <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,您可以看到它在页面上的呈现方式。

    【讨论】:

    • 当您使用 PHP 时,您始终可以通过 PHP 的 htmlentities 函数传递它。这将如上所述对输入进行编码。在 PHP 页面上放置 &lt;?php ... ?&gt; 将看到 PHP 在执行 JavaScript 之前呈现内容。此外,使用 JavaScript 对 HTML 进行编码将是一个坏主意,因为禁用 JavaScript 的人最终会看到一个非常混乱的网站。
    • 谢谢,还没有真正考虑过,不过我正在寻找一种方法来自动执行此操作,只要我有一个 pre 标签。我不想每次都写出 htmlentities 函数并在其中输入来自 pre 的数据。
    • 您说您希望它自动化,但听起来您无论如何都要手动输入内容。如果您手动执行此操作,只需进行简单的查找和替换,将&amp;lt;&amp;gt; 替换为&amp;lt;&amp;gt;。如果内容被自动添加到页面(从数据库或外部文件),只需将内容通过 htmlentities 函数,然后再将其显示在页面上。
    • 我正在手动添加代码 sn-p 内容,这是正确的,但我不想每次都写出围绕内容的功能。因为它主要是从我的代码编辑器复制粘贴。
    • 在这种情况下,只需使用查找和替换。大多数流行的文本编辑器都支持这一点 - 只需粘贴您的代码,查找和替换,复制更改的代码并将其放在您的网站上。花费的时间不应超过 20 秒,并且不会浪费资源让您的服务器或用户浏览器为您进行替换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2015-01-22
    • 2023-03-29
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多