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

问题描述 投票:0回答:1

我正在使用PHP应用程序生成器(Scriptcase,如果它很重要),我正在创建一个使用vanilla JS和SQL查询组合的网页。

我有一个问题,最后我知道原因。

我有一个表格,你有一个NVARCHAR(最大)类型的大字段,在这个字段你可以写文字,当我使用return(我继续下一行)然后会发生什么,我的JS代码中断了。

如果我删除所有新行,那么它的工作原理。

从Chrome调试器中可以看出,在换行后,代码会改变颜色,这意味着它不再是字符串了:

enter image description here

你在图片中看到字符串停止为红色,所以我认为它被视为代码。

我怎么解决这个问题?

这是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,如图所示

enter image description here

javascript php sql ssms
1个回答
2
投票

您可以使用类似的东西来转义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);
© www.soinside.com 2019 - 2024. All rights reserved.