使用 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 - 考虑 &lt;a &lt;?php echo $attrs ?&gt;&gt; 甚至像 &lt;p class="&lt;?php echo $cls ?&gt;"&gt; 这样简单的东西。 请解释NodeJS和PHP的交互 基本上你在 jQuery 上使用.text 函数,它会破坏所有&lt;&gt;,因为它们是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)); ?>);

【讨论】:

为什么&lt;?php ?&gt; 周围没有引号?我的 IDE 将其突出显示为语法错误并且不起作用。 是的,第二个答案似乎是错误的。与大多数 javascript/php 问题不同,在这个问题中,JavaScript 正在生成 PHP,而不是相反! @SergeyBasharov 没有引号,因为这是 json_encode 为你做的,它生成一个在 JS 中有效的字符串(如果你传递一个字符串)。它将输出与第一个完全相同的内容,就像我之前所说的,如果wp_title() 返回包含引号或嵌入换行符或其他需要转义的字符的字符串,它不会中断 @Eric 如果 OP 试图让 JS 运行一些 PHP,那么这两个答案都是错误的并且没有办法让它工作。我假设这不是 OP 想要做的,他们只是想在他们的 JS 中使用 PHP 生成的内容。谢尔盖,你能解释一下吗?

以上是关于使用 NodeJS 和 JSDOM/jQuery 从代码片段构建 PHP 页面的主要内容,如果未能解决你的问题,请参考以下文章

使用 Websockets 和 Nodejs 上传文件

如何使用nodejs作为java和前端的中间件

如何在 NodeJS、Mongoose 和 TypeScript 中使用日期和时间?

使用 Angular 和 NodeJs (CORS) 的跨域请求

使用 MongoDB 和 Nodejs 插入和查询日期

nodejs可以自定义header吗