我有一个第三方服务器,它有一个传统的ASP页面,可以接收表单数据。从我的网页上我有一个PHP脚本,它使用curl将字段发送到ASP页面。除非用户在文本中包含撇号字符,否则一切正常。在后端,它被收到“\”。甚至更奇怪的是它只能从我的托管网站上做到这一点。当我在本地测试它工作正常。
以下是发送数据的PHP代码段:
$datatopost = array ();
foreach($_POST as $key => $data) {
$datatopost[$key] = $data;
}
$ch = curl_init("http://my.server.com/validate.asp");
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $datatopost);
$result = curl_exec($ch);
答案 0 :(得分:5)
您可能需要在该特定服务器中禁用Magic Quotes:http://php.net/manual/en/security.magicquotes.php
此外,您可以将此代码添加到脚本的顶部(更好的是,在每个页面中包含的库中),因此无论环境如何,您都可以使魔术引号反转:
<?php
if (get_magic_quotes_gpc()) {
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
$_POST = array_map('stripslashes_deep', $_POST);
$_GET = array_map('stripslashes_deep', $_GET);
$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
?>
取自http://php.net/manual/en/security.magicquotes.disabling.php
答案 1 :(得分:4)
确保禁用魔法引号。看看您的数据是如何来自$_POST
的,这是最有可能的罪魁祸首。
答案 2 :(得分:1)
使用PHP的filter_input()
来获取POST变量。如果已启用,则会绕过magic_quotes
,并会鼓励您根据需要验证或清理您的输入。
这种方法需要您提前知道POST变量的名称,但这是一件好事。这是它的外观:
$expected_keys = array(
'foo',
'bar',
// etc.
);
$datatopost = array();
foreach ($expected_keys as $expected_key) {
$value = filter_input(INPUT_POST, $expected_key, <filter>, [<options>]);
if ($value !== FALSE && !is_null($value)) {
$datatopost[$expected_key] = $value;
}
}
// CURL code here