处理JavaScript、PHP和MSSQL中的反斜杠


Dealing with backslashes in JavaScript, PHP and MSSQL

在我发表这篇文章之前,让我明确一点,我对即将向您展示的字符串绝对没有什么可以改变的,它必须保持原样。

我需要找到一种在没有任何转义机制的情况下解析字符串的方法。我有一个字符串:"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作为主重定向程序。

我猜您的流程类似于:

在PHP中,从SQL数据库获取数据并以JavaScript代码输出。然后,稍后将其发送回PHP进行处理。

在这种情况下,在将字符串传递给JavaScript之前,需要对其进行一些操作。

您可以通过对字符串调用json_encode来实现这一点。

例如,而不是类似的东西:

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

你会有:

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

这意味着,无论字符串中有什么字符,JavaScript、反斜杠和所有字符中都会有确切的字符串。

当JavaScript将其传递回PHP时,可能是通过一个表单,反斜杠会得到很好的维护——任何表单都是如此,因为用户可以键入他们想要的所有反斜杠。只需小心为您正在使用的数据库类型使用适当的转义函数,以确保任何特殊字符(如反斜杠)都被正确转义。

由于无法正确转义反斜杠,我们改为传递4个其他字段来标识帐户,然后在php中提取accountno,不再需要转义任何内容。