如何在nl2br函数之后连接两个不同行中的字符串

时间:2013-10-09 15:41:32

标签: javascript php

我在使用php中的n12br()函数创建JavaScript变量时遇到了困难。以下是示例代码:

var example = "<?php echo nl2br("line 1 \n line 2") ?>";

这会产生以下输出:

var example = "line 1<br>
    line2"

由于换行导致错误。如何将输出连接到一行?

3 个答案:

答案 0 :(得分:0)

在输出JS的末尾添加分号?

答案 1 :(得分:0)

var example = '<?php echo str_replace("\n","\u000a", nl2br("line 1 \n line 2")); ?>';

答案 2 :(得分:0)

什么

正如您从输出中看到的那样(也是评论和PHP manual中的CBroe说明),函数nl2br会插入新的广告代码(<br><br />)新行字符之前(\n\r\n\r\r\n)。

为什么

JS中不允许使用多行字符串,这会导致语法错误,因为就JS引擎而言,字符串尚未终止。

如何

......要修复......

幸运的是,很容易创建自己的功能来解决这个问题:

function jsbrml($string){
    return preg_replace('/(\r\n|\n\r|[\r\n])/', "<br />\\\n", $string);
}

function jsbrsl($string){
    return preg_replace('/(\r\n|\n\r|[\r\n])/', "<br />", $string);
}

第一个函数jsbrml将与默认的PHP nl2br相同,只是它插入 <br />\而不仅仅是<br />该行末尾的附加反斜杠允许您在JS中使用多行字符串文字。

第二个功能jsbrsl会删除换行符\r和/或\n以及替换 <br />

示例jsbrml

var example = "<?php echo jsbrml("line 1 \n line 2") ?>";

var example = "line1 <br />\
line2";

示例jsbrsl

var example = "<?php echo jsbrsl("line 1 \n line 2") ?>";

var example = "line1 <br /> line2";