繁体   English   中英

当NVARCHAR换行时,使用SQL语句的Javascript代码不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM