Работа с обратными слешами в JavaScript, PHP и MSSQL - PullRequest
1 голос
/ 22 марта 2012

Прежде чем я доберусь до этого поста, позвольте мне прояснить это, я абсолютно ничего не могу изменить в строке, которую я собираюсь вам показать, она должна остаться такой, как есть.

Мне нужночтобы найти какой-то способ разбора строки без каких-либо экранирующих механизмов.У меня есть эта строка: «A2 & 11203 [3 \ 813+! 5> di», которая используется этой программой, с которой я вынужден иметь дело.

SQL анализирует эту строку просто отлично (обратная косая черта и все), ноJavaScript и PHP продолжают использовать его в качестве экранирующего механизма и удаления числа 8.

В моем приложении происходит то, что он получает эту строку, а затем, используя JavaScript, перенаправляет на веб-страницу вместе со строкой, проблема в том, чтоудаляется обратная косая черта, которую я должен иметь.

Я нашел этот код в другом сообщении stackoverflow, и он работает для того, что мне нужно, но мне нужно, чтобы JavaScript (и в конечном итоге PHP) не удалил обратную косую черту.

function post_to_url(path, params, method) {
    method = method || "post"; // Set method to post by default, if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}

Строка должна быть обработана полностью необработанной, я только что проверил базу данных, и есть несколько случаев с множеством обратных косых черт повсюду и чертовски рядом с любым символом, который вы можете найти на английской клавиатуре.

Есть идеи относительно того, что я могу сделать по этому вопросу?Я вынужден использовать JavaScript в качестве основного перенаправителя.

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Полагаю, ваш поток выглядит примерно так:

В PHP получить данные из базы данных SQL и вывести их в коде JavaScript. Затем позже отправьте его обратно в PHP для обработки.

В этом случае вам нужно что-то сделать со строкой, прежде чем передавать ее в JavaScript.

Этого можно добиться, вызвав json_encode в строке.

Например, вместо чего-то вроде:

var myvar = "<?php echo $var; ?>";

Вы бы получили:

var myvar = <?php echo json_encode($var); ?>

Это означает, что, независимо от того, какие символы находятся в строке, у вас всегда будет эта точная строка в JavaScript, обратная косая черта и все.

Когда JavaScript передает его обратно в PHP, предположительно через форму, обратная косая черта поддерживается очень хорошо - это верно для любой формы, поскольку пользователь может вводить все обратные косые черты, которые он хочет. Просто будьте осторожны, используя соответствующую функцию экранирования для используемого вами типа базы данных, чтобы гарантировать правильное экранирование любых специальных символов (например, обратной косой черты).

0 голосов
/ 27 марта 2012

Не имея возможности правильно избежать обратной косой черты, мы перешли к передаче 4 других полей, которые идентифицировали бы учетную запись, а затем извлекли accountno в рамках php, больше не нужно ничего экранировать.

...