PHP Curl добавляет '\' к апострофу, отправляемому на страницу ASP - PullRequest
4 голосов
/ 13 ноября 2009

У меня есть сторонний сервер с классической страницей ASP, которая принимает данные формы. С моей веб-страницы у меня есть PHP-скрипт, который отправляет поля на ASP-страницу с помощью curl. Все работает хорошо, за исключением случаев, когда пользователь включает в текст символ апострофа. В конце он принимается как "\". Что еще более странно, это то, что он делает это только с моего веб-сайта. Когда я тестирую локально, все работает нормально.

Вот фрагмент 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 ]

5 голосов
/ 13 ноября 2009

Возможно, вам необходимо отключить магические кавычки на этом конкретном сервере: 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

4 голосов
/ 13 ноября 2009

Убедитесь, что у вас отключены магические кавычки. Видя, как ваши данные поступают с $_POST, это наиболее вероятный виновник.

1 голос
/ 13 ноября 2009

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...