SagePay服务器URL编码重音字符问题

时间:2014-02-19 17:19:11

标签: php curl url-encoding sagepay

我很难理解通过cURL发送给SagePay的参数编码。根据他们的文档,所有参数都需要进行URL编码。我在我的参数上使用PHP的urlencode方法,然后将它们作为字符串传递给SagePay。以下是字符串部分的示例: -

$data = "BillingFirstnames=Jos%C3%A9+Luis&BillingSurname=Test" ...

但是,它无法在SagePay服务器网站上正确呈现重音“é”: -

Firstname: José

SagePay的文档声明您可以将重音字符作为计费名字(等)的一部分传递,并且参数应该是URL编码。

我们的cURL请求看起来像这样(如果这有帮助): -

// Set the URL
curl_setopt($cs, CURLOPT_URL, $url);
// No headers, please
curl_setopt ($cs, CURLOPT_HEADER, 0);
// It's a POST request
curl_setopt ($cs, CURLOPT_POST, 1);
// Set the fields for the POST
curl_setopt ($cs, CURLOPT_POSTFIELDS, $data);
// Return it direct, don't print it out
curl_setopt($cs, CURLOPT_RETURNTRANSFER,1); 
// This connection will timeout in 30 seconds
curl_setopt($cs, CURLOPT_TIMEOUT,30); 
curl_setopt($cs, CURLOPT_SSL_VERIFYPEER, FALSE);

$response = preg_split('/$\R?^/m',curl_exec($cs));

有关如何解决这个问题的建议,以便SagePay上的名字显示为“José”?

1 个答案:

答案 0 :(得分:3)

您可以通过utf-8标头设置http内容类型。例如:

curl_setopt($cs, CURLOPT_HTTPHEADER, 
    array('Content-Type: application/x-www-form-urlencoded;charset="utf-8"')
);

你已经在你的问题中提到了php urlencode,但我没有在你的代码中看到它。所以也要再添加一次。

$post = "age=15&name=".urlencode("José");