PHP nl2br 用于文本内容,但将其排除在 javascript 内容之外

PHP nl2br for text content but make it exclude on javascript content

我需要对来自数据库的页面内容使用 nl2br 函数。但是 <br /> 标签也添加到 javascript 内容中。

<script type="text/javascript"><br />
let test = "test";<br />
let menu = "menu";<br />
</script>

首先,make 将 br 添加到所有内容,而不是从 javascript 内容中删除 br,我试过这个:

<?php
//content coming from db
$content = nl2br($content);
$content = preg_replace("/<script\b[^>]*>([\s\S]*?)<\/script\b[^>]*>/m", str_replace("<br />", "", nl2br($content)), $content);
echo $content;
?>

结果:br 没有添加到 javascript 但 javascript 和文本内容确实出现了两次(br 没有处理第一个文本内容但处理了第二个文本内容)

如何在 javascript 代码中排除 br?

假设您的正则表达式满足您的需要,您可以使用 preg_replace_callback 来实现您想要的。

//content coming from db
$content = preg_replace_callback("/<script\b[^>]*>([\s\S]*?)<\/script\b[^>]*>/m",function($matches){return str_replace('<br />','',$matches[0]);},nl2br($content));