[英]Javascript code using SQL statements doesn't work when NVARCHAR has a line break
我正在使用PHP应用程序生成器(如果需要,可以使用脚本),并且正在创建一个使用原始JS和SQL查询组合的网页。
我遇到了一个问题,最后我知道了原因。
我有一个表单,其中有一个类型为NVARCHAR(max)的大字段,并且可以在该字段中编写文本,当我使用return(我进入下一行)时,发生的事情是我的JS代码中断了。
如果我删除了所有新行,那么它将起作用。
正如您从Chrome调试器中看到的那样,在换行符之后,代码会更改颜色,因此这意味着它不再是字符串了:
您在图片中看到该字符串不再是Red,所以我认为它被视为代码。
我该如何解决?
这是JS代码:
foreach({rsg} as $key=>$step) {
$var_nodes_array .=
'{
"id": "step_'.$step[0].'",
"title": "'.$step[1].'",
"class": "bgwhite,test_'.$step[0].',boards",
"item": [
';
// Deals
$sql_deals = "
SELECT
ItemID,
ItemName,
ItemDescr
FROM TblItem"
sc_lookup(rsd, $sql_deals);
foreach({rsd} as $key=>$val) {
// Building the nodes
$var_nodes_array .= '
{
"id": "'.$val[0].'",
"title": "'.$val[1].'",
"class":"color2",
"drop": function(el){
save(el.dataset.eid, "updstep", $(this).closest("div[data-id]").attr("data-id"));
},
"items": [
{
"title": "'.$val[2].'",
"type": "textEdit",
"id": "tit_'.$val[0].'",
"class": "titleKanban"
}
]
},';
}
这里的错误部分位于结尾处,在名为Items []的数组中,有一个“标题”字段,该字段从ItemDescription(这是我所说的NVARCHAR(max))获取数据库值。
因此,我需要一种避免这种情况的方法,如果在“数据库”字段中有新行,那么就不要在这里考虑它们,有什么线索吗?
谢谢
编辑:稍作更新,如果在我的表单中,在描述字段中,而不是使用ENTER来换行,我放了,并且我从不按Enter,那么该文本将正确显示,并带有换行符,并且不会打破JS,但这不是一个好的解决方案,我不能每次都需要换行时就放那个标签! 因此,基本上,当我使用ENTER并提交字段时,它会与这些换行符一起发送到数据库,而当JS代码检索到该字段的值时,由于换行符,它会变得混乱
EDIT2:我尝试使用$val_test = str_replace("\\n", "\\\\n", $val[1]);
正如一个答案所建议的那样,但是输出是JS仍然坏了,但是现在您可以在图片中看到的每行添加\\ n
您可以使用类似以下内容来转义Java换行符:
str_replace("\n", "\\n", $val);
如果文本中也有\\r
字符,则需要将其删除,请改用此字符:
str_replace(array("\n", "\r"), array("\\n", ""), $val);
这将变成
line 1
line 2
进入
line 1\n\nline 2
然后可以将其分配给JS变量,例如
let x = "line 1\\n\\nline 2"; console.log(x);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.