2015-11-16 87 views
1

我試圖發送一個字符串像"@mystr"使用PHP CURL POST方法,但如果我只是下面的代碼發送「@」開始拋出如下錯誤:發送字符串在PHP捲曲的字符串

不推薦使用:curl_setopt():不推薦使用用於文件上傳的@filename API。請使用CURLFile類,而不是...

注: $領域是這樣的:

$fields=['chat_id'=>'@someusername','text'=>'hello']; 

這對電報機器人API,如果我在GET方法使用%40而不是@它將是好的,電報會將我的消息發送到我的頻道,但我必須使用POST方法。

反正是有字符串發送與捲曲@開始?

+0

的可能的複製http://stackoverflow.com/questions/10060093/special-characters-like-and-in-curl-post-data – Jan

+2

@Jan不,這不是,這不是一個CURL這是PHP curl class – Omid

+1

在GET參數或URI字符串中使用'@'是違反RFC標準的,除非它用於在URI'ftp:// user:[email protected]之前的資源路徑之前對信息進行符號化。 COM/folder'。發帖是另一回事,但只是想解釋爲什麼你不得不在GET中使用'%40'。這個問題是另一個問題的重複,而不是Jan所標記的那個問題。一秒鐘正確的重複標誌.... – skrilled

回答

3

我已經找到了解決辦法在這裏: http://php.net/manual/en/function.curl-setopt.php

CURLOPT_SAFE_UPLOAD

TRUE以禁用@前綴支持上傳在CURLOPT_POSTFIELDS,這意味着開始與@值可以作爲字段被安全地傳送文件。 CURLFile可能用於上傳。

添加在PHP 5.5.0與FALSE爲默認值。 PHP 5.6.0將默認值更改爲TRUE。

$url_str = $url->getUrl(); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, TRUE); //<- HERE 
    curl_setopt($ch, CURLOPT_URL, $url_str); 
    curl_setopt($ch, CURLOPT_POST, count($fields)); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:multipart/form-data']); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

    $out = curl_exec($ch); 
    curl_close($ch);