在我发表这篇文章之前,让我明确一点,我对即将向您展示的字符串绝对没有什么可以改变的,它必须保持原样。
我需要找到一种在没有任何转义机制的情况下解析字符串的方法。我有一个字符串:"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,不再需要转义任何内容。