我正在使用PHP应用程序生成器(Scriptcase,如果它很重要),我正在创建一个使用vanilla JS和SQL查询组合的网页。
我有一个问题,最后我知道原因。
我有一个表格,你有一个NVARCHAR(最大)类型的大字段,在这个字段你可以写文字,当我使用return(我继续下一行)然后会发生什么,我的JS代码中断了。
如果我删除所有新行,那么它的工作原理。
从Chrome调试器中可以看出,在换行后,代码会改变颜色,这意味着它不再是字符串了:
你在图片中看到字符串停止为红色,所以我认为它被视为代码。
我怎么解决这个问题?
这是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 []的数组中,有“title”字段从ItemDescription获取数据库值(这是我所谈到的NVARCHAR(max))。
所以我需要一种方法来避免这种情况,如果在那个数据库字段中有新行,不管怎样在这里考虑它们,任何线索如何?
谢谢
编辑:一个小更新,如果在我的形式,在描述字段中,而不是用ENTER打破行,我放,我不按Enter键,然后文本将正确显示,有换行符,它不会打破JS,但这不是一个好的解决方案,我不能每次都需要换行,放那个标签!所以基本上当我使用ENTER并提交字段时,它会被这些换行符发送到DB,当JS代码检索到该字段的值时,由于换行符,它会搞砸
编辑2:我尝试使用$val_test = str_replace("\n", "\\n", $val[1]);
正如答案所建议的,但是输出结果是JS仍然坏了,但是现在它在每个新行上添加了\ n,如图所示
您可以使用类似的东西来转义Javascript的换行符
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);