我正在使用PHP应用程序生成器(如果重要的话,请使用Scriptcase),并且我正在创建一个组合使用普通JS和SQL查询的网页。
我遇到了一个问题,最终我知道了原因。
我有一个表单,其中有一个NVARCHAR(max)类型的大字段,您可以在这个字段中编写文本,当我使用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[]的数组中,有一个“标题”字段,它从ItemDescription (这就是我提到的NVARCHAR(max) )中获取数据库值。
所以我需要一种方法来避免这种情况,如果在Database字段中有新的行,不知何故在这里不考虑它们,有什么线索吗?
谢谢
编辑:稍微更新一下,如果在我的表单中,在description字段,而不是用ENTER换行符,我put,并且我从来不按Enter键,那么文本将被正确显示,带换行符,它不会中断JS,但这不是一个好的解决方案,我不能每次我需要换行符的时候,放上那个标签!因此,基本上,当我使用ENTER并提交字段时,它会连同换行符一起发送到DB,而当JS代码检索到该字段的值时,它会因为换行符而变得混乱
EDIT2:我试过使用$val_test = str_replace("\n", "\\n", $val[1]);
如答案所示,但输出结果是JS仍然损坏,但现在它在图中所示的每个新行上添加\n

发布于 2019-02-28 19:48:43
您可以使用如下命令来转义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);
https://stackoverflow.com/questions/54924746
复制相似问题