PHP Curl将'\'添加到发送到ASP页面的撇号字符

时间:2009-11-13 19:54:52

标签: php curl asp-classic

我有一个第三方服务器,它有一个传统的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);

3 个答案:

答案 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