簡體   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