将php函数生成的JavaScript代码放在php变量中,然后在html页面上显示而不执行

时间:2016-08-23 11:05:48

标签: javascript php html

我有以下php功能

<?php function searchbox_markup(){
$baseUrl = "example.com"; ?>
<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "WebSite",
    "url": "<?php echo $baseUrl; ?>",
    "potentialAction": {
        "@type": "SearchAction",
        "target": "<?php echo $baseUrl . 'index.php?page=search&sPattern={search_term_string}'; ?>",
        "query-input": "required name=search_term_string"
    }
}
</script>
<?php } ?>

我想在我的页面上显示上述函数的输出,而不执行其中包含的JavaScript代码,我尝试了以下内容,但它没有在html中显示JavaScript代码。

<?php
$snippet = '"' . searchbox_markup() . '"';
$htmlSnippet = "<pre>".htmlspecialchars($snippet)."</pre>";
echo $htmlSnippet;
?>

4 个答案:

答案 0 :(得分:4)

如果您尝试将Javascript代码打印到页面,则您希望将所有HTML字符的字符转换为其HTML符号等效项。为此,我们可以使用htmlspecialchars()

如果您希望结构保持不变,那么它看起来就像您粘贴到问题中的代码,您需要将其包装在相关的HTML标记中。在这种情况下,那将是<pre>。以前,您也可以使用<xmp>但现在不推荐使用它,不建议使用它。

将所有这些放在一起:

$snippet = "<script type='application/ld+json'>
{
    '@context': 'http://schema.org',
    '@type': 'WebSite',
    'url': 'http://example.com/',
    'potentialAction': {
        '@type': 'SearchAction',
        'target': 'http://example.com/index.php?page=search&sPattern={search_term_string}',
        'query-input': 'required name=search_term_string'
    }
}
</script>";

$htmlSnippet = "<pre>".htmlspecialchars($snippet)."</pre>";

此代码执行以下操作:

  • 获取您要使用的代码并将其作为字符串分配给变量($snippet)(注意确保引号不会破坏字符串封装)。
  • 使用htmlspecialchars()
  • 转换$snippet
  • Concatenates围绕htmlentities()输出的HTML代码<pre></pre>
  • 将所有这些分配给我们的$htmlSnippet PHP变量。

然后我们可以回显这个$htmlSnippet变量,最后将问题中的输出打印到页面,而不会将其解释为HTML。

说明:

  • 您可能需要考虑使用<code></code> HTML标记,因为那时您明确声明该元素中包含的内容是代码而不是其他任何内容。默认情况下,它还会以不同的字体显示代码。
  • 根据您的情况,您可以使用htmlentities()代替htmlspecialchars()。有关详细信息,请查看this answer

更新

更新问题后,您似乎希望问题中的函数返回此值。您需要调整函数以将此值作为字符串返回。这样的事可能会奏效:

function searchbox_markup(){
    $baseUrl = "example.com";

    $snippet = "<script type='application/ld+json'>
    {
        '@context': 'http://schema.org',
        '@type': 'WebSite',
        'url': '".$baseUrl."',
        'potentialAction': {
            '@type': 'SearchAction',
            'target': '".$baseUrl."'index.php?page=search&sPattern={search_term_string}',
            'query-input': 'required name=search_term_string'
        }
    }
    </script>";

    return $snippet;
}

对我而言,这看起来很混乱。几乎可以肯定,有一种更好的方法可以解决您尝试修复的问题。

答案 1 :(得分:1)

使用单引号,

    $temp = '<script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "WebSite",
        "url": "http://example.com/",
        "potentialAction": {
            "@type": "SearchAction",
            "target": "http://example.com/index.php?page=search&sPattern={search_term_string}",
            "query-input": "required name=search_term_string"
        }
    }
</script>';
echo '<pre>';
echo htmlspecialchars($temp);
echo '</pre>';

答案 2 :(得分:0)

使用htmlspecialchars:

$jsCode = '<script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "WebSite",
        "url": "http://example.com/",
        "potentialAction": {
            "@type": "SearchAction",
            "target": "http://example.com/index.php?page=search&sPattern={search_term_string}",
            "query-input": "required name=search_term_string"
        }
    }
</script>';

$jsToDisplay = htmlspecialchars($jsCode);

答案 3 :(得分:0)

您可以使用<xmp>代码。

在HTML中

<xmp>
<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "WebSite",
    "url": "http://example.com/",
    "potentialAction": {
        "@type": "SearchAction",
        "target": "http://example.com/index.php?page=search&sPattern={search_term_string}",
        "query-input": "required name=search_term_string"
    }
}
</script>
</xmp>

如您所述,您希望将其保存在php变量中。

在php中

$var='<xmp>
<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "WebSite",
    "url": "http://example.com/",
    "potentialAction": {
        "@type": "SearchAction",
        "target": "http://example.com/index.php?page=search&sPattern={search_term_string}",
        "query-input": "required name=search_term_string"
    }
}
</script>
</xmp>';