我在使用 php.ini 中的n12br()函数创建 JavaScript 变量时遇到了困难。下面是示例代码:
var example = "<?php echo nl2br("line 1 \n line 2") ?>";
这会产生以下输出:
var example = "line 1<br>
line2"
由于换行导致错误。如何将输出连接到一行?
我在使用 php.ini 中的n12br()函数创建 JavaScript 变量时遇到了困难。下面是示例代码:
var example = "<?php echo nl2br("line 1 \n line 2") ?>";
这会产生以下输出:
var example = "line 1<br>
line2"
由于换行导致错误。如何将输出连接到一行?
输出JS末尾加分号?
正如您从您的输出中看到的(也是 CBroe 在评论和PHP 手册中的解释),该函数在换行符(, , , )之前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 />.
jsbrmlvar example = "<?php echo jsbrml("line 1 \n line 2") ?>";
var example = "line1 <br />\
line2";
jsbrslvar example = "<?php echo jsbrsl("line 1 \n line 2") ?>";
var example = "line1 <br /> line2";
var example = '<?php echo str_replace("\n","\u000a", nl2br("line 1 \n line 2")); ?>';