Javascript-код, использующий операторы SQL, не работает, когда NVARCHAR имеет разрыв строки - PullRequest
0 голосов
/ 28 февраля 2019

Я использую генератор приложений PHP (Scriptcase, если он имеет значение) и создаю веб-страницу, которая использует комбинацию ванильных запросов JS и SQL.

У меня возникла проблема, и, наконец, я знаю,причина.

У меня есть форма, где у вас есть большое поле типа NVARCHAR (max), и в этом поле вы можете написать текст, а когда я использую 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 (макс.), о котором я говорилt).

Так что мне нужен способ избежать этого, если в этом поле базы данных есть новые строки, чтобы как-то их здесь не учитывать, какая-либо подсказка, как?

Спасибо

РЕДАКТИРОВАТЬ: небольшое обновление, если в моей форме, в поле описания, вместо того, чтобы разбивать строку нажатием ENTER, я ставлю, и не нажимаю Enter никогда, тогда текст будет отображаться правильно, с переносами строк ине сломает JS, но это не хорошее решение, я не могу каждый раз, когда мне нужен разрыв строки, поставить этот тег!Таким образом, в основном, когда я использую ENTER и отправляю поле, оно отправляется в БД с этими разрывами строк, а когда код JS получает значение этого поля, он ошибается из-за разрывов строк

EDIT2: Я пытался использовать $val_test = str_replace("\n", "\\n", $val[1]);

, как подсказывает ответ, но вывод таков, что JS все еще не работает, но теперь он добавляет \ n к каждой новой строке, как вы можете видеть на рисунке

enter image description here

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете избежать перехода на новую строку для 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...