我在使用php中的n12br()
函数创建JavaScript变量时遇到了困难。以下是示例代码:
var example = "<?php echo nl2br("line 1 \n line 2") ?>";
这会产生以下输出:
var example = "line 1<br>
line2"
由于换行导致错误。如何将输出连接到一行?
答案 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";