2016-04-05 4 views
0

apiアクセスにodataプロトコルを使用しているサイトがあります。特定のステータスIDを持つユーザーをロードするために は、例えば、私はこのURLを使用することができます。URLを要求するための単一引用符付きのPHP文字列

https://domain.com/contacts/?$filter=status_id eq 1 

プレーンでシンプル。この場合、私はただの文字列を定義し、カールと予想される応答取得しています:

$ch = curl_init(); 
$query = 'https://domain.com/contacts/?$filter=status_id eq 1' 
curl_setopt($ch, CURLOPT_URL, $query); 
$response = curl_exec($ch); 

をしかし、本当の問題は、こので始まる:

https://domain.com/contacts/?$filter=email eq '[email protected]' 

ここでは、電子メールを単一引用符で囲まれています。私はシングルとエスケープして、文字列を二重引用符の両方を試してみた:これの

$query = 'https://domain.com/contacts/?$filter=email eq \'[email protected]\'' 
$query = "https://domain.com/contacts/?\$filter=email eq '[email protected]'" 

どれも働いていない - 私は、リクエストエラーを毎回取得してきました。 しかし、私はルビーでこれを実行する場合 - それとして働いすべてexpecteted:

RestClient.get "https://domain.com/contacts/?$filter=email eq '[email protected]'", [] 

私はここで何ができますか? PHPのバージョンは5.3です。

+0

あなたのエラーは何ですか?私のために働く、https://eval.in/547892 ..(実際のURLについて話していない)。 – chris85

答えて

2
https://domain.com/contacts/?$filter=email eq '[email protected]' 

これは有効なURIではありません。有効なURIエンコード形式は、次のようになります

https://domain.com/contacts/?%24filter=email%20eq%20'email%40example.com' 

URLは、あなたが直接使用することはできませんが、有効であるために%..の配列にエンコードする必要のある特定の特殊文字を持っています。これはPHPでrawurlencodeを使って行います。受信サーバはそのURLを受け入れます

$url = 'https://domain.com/contacts/?' . rawurlencode('$filter') . '=' . rawurlencode("email eq '[email protected]'"); 

かどうかは、別のトピックであるが、少なくとも、あなたの側で基本をカバーしている:あなたは、別途アイテムをエンコードする必要があります。

+0

はい、それはトリックをしました、ありがとう! – Rasmussen

関連する問題