首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当NVARCHAR有换行符时,使用SQL语句的Javascript代码不起作用

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

Stack Overflow用户
提问于 2019-02-28 19:32:12
回答 1查看 229关注 0票数 0

我正在使用PHP应用程序生成器(如果重要的话,请使用Scriptcase),并且我正在创建一个组合使用普通JS和SQL查询的网页。

我遇到了一个问题,最终我知道了原因。

我有一个表单,其中有一个NVARCHAR(max)类型的大字段,您可以在这个字段中编写文本,当我使用return (我转到下一行)时,发生的情况是,我的JS代码中断。

如果我删除所有的新行,那么它就可以工作。

正如你在Chrome调试器中看到的,在换行符之后,代码改变了颜色,这意味着它不再是一个字符串了:

您可以在图片中看到字符串不再是红色的,所以我认为它被视为代码。

我该如何解决这个问题呢?

这是JS代码:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-28 19:48:43

您可以使用如下命令来转义Javascript的换行符

代码语言:javascript
复制
str_replace("\n", "\\n", $val);

如果文本中还包含\r字符,则需要删除这些字符,因此请使用以下代码:

代码语言:javascript
复制
str_replace(array("\n", "\r"), array("\\n", ""), $val);

这将会变成

代码语言:javascript
复制
line 1

line 2

转到

代码语言:javascript
复制
line 1\n\nline 2

然后可以将其赋值给JS变量,例如

代码语言:javascript
复制
let x = "line 1\n\nline 2";
console.log(x);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54924746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档