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