使用 NodeJS 和 JSDOM/jQuery 从代码片段构建 PHP 页面
Posted
技术标签:
【中文标题】使用 NodeJS 和 JSDOM/jQuery 从代码片段构建 PHP 页面【英文标题】:Build a PHP page from snippets with NodeJS and JSDOM/jQuery 【发布时间】:2012-09-29 10:31:51 【问题描述】:我正在使用现成的代码 sn-ps 创建一个 php 页面,并使用 JSDOM/jQuery 修改页面。例如,我有这样的代码:
window.$('title').text('<?php wp_title(); ?>');
但它会插入转义的 php 标签。如何让它保持原样而不转义?
我尝试了另一个名为 Cheerio 的库,看起来像这样的代码现在可以正常工作:
$('title').html("<?php wp_title(); ?>");
没有字符被转义,我可以正确地将其保存到文件中。
更新:我这样做的原因是我必须处理 WordPress 主题的创建,并且我想简化这个过程。由于我既不是 WordPress 主题结构也不是 PHP 的忠实粉丝,我想在 Jade 中构建文件集,通过 Express 运行它们,然后使用自动化过程将它们编译为 Wordpress 主题。我在这方面取得了一些成功。现在我使用 Jade mixins 来转:
+title
变成这样:
<title><?php wp_title(); ?>
以最简单的形式。
这样我就可以让我的模板易于修改,使用起来既美观又愉快。
【问题讨论】:
Dom 操作无法真正处理生成 PHP - 考虑<a <?php echo $attrs ?>>
甚至像 <p class="<?php echo $cls ?>">
这样简单的东西。
请解释NodeJS和PHP的交互
基本上你在 jQuery 上使用.text
函数,它会破坏所有<
和>
,因为它们是HTML,你应该尝试使用.html
。 tbh 我认为最好为此创建一个 Jade 扩展(如果可能的话,只需 fork Jade 引擎)
【参考方案1】:
如果您不希望您的内容被转义,请使用 html 方法
window.$('title').html('<?php wp_title(); ?>');
但请注意,您的标题不包含换行符或引号。这就是为什么我更喜欢使用
// Using the version of wp_title that returns something instead of printing
// directly to the output
window.$('title').html(<?php echo json_encode(wp_title('', true)); ?>);
【讨论】:
为什么<?php ?>
周围没有引号?我的 IDE 将其突出显示为语法错误并且不起作用。
是的,第二个答案似乎是错误的。与大多数 javascript/php 问题不同,在这个问题中,JavaScript 正在生成 PHP,而不是相反!
@SergeyBasharov 没有引号,因为这是 json_encode 为你做的,它生成一个在 JS 中有效的字符串(如果你传递一个字符串)。它将输出与第一个完全相同的内容,就像我之前所说的,如果wp_title()
返回包含引号或嵌入换行符或其他需要转义的字符的字符串,它不会中断
@Eric 如果 OP 试图让 JS 运行一些 PHP,那么这两个答案都是错误的并且没有办法让它工作。我假设这不是 OP 想要做的,他们只是想在他们的 JS 中使用 PHP 生成的内容。谢尔盖,你能解释一下吗?以上是关于使用 NodeJS 和 JSDOM/jQuery 从代码片段构建 PHP 页面的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NodeJS、Mongoose 和 TypeScript 中使用日期和时间?