javascript - PHPでスラッシュをエンコードするURL - コードログ
API に接続してオートバイに関する情報を取得しようとする PHP のページがあります。ここでの問題は、内部ルートを使用して CURL 経由で API を呼び出し、このルートに次のようにアクセスできることです。
http://mywebpage.dev/manufacturer/BETA/year/2016/category/M/model/MINI%20CROSS%2010%2F10/versions
私はこれをコーディングし、デコードされて JSON 応答が返される API を介して送信しようとしましたが、問題は、何らかの理由で対角線をスラッシュするたびにルート メソッドに到達しないことです。 、 独立個別に、またはそれらをエンコードするかどうか...
ここでオプションが本当に不足しています。ここでの問題は正確には何ですか?この種の問題は URI エンコーディングで解決できるのではないでしょうか? PHP が %2F をスラッシュとして扱い続けるのはなぜですか?これを機能させる方法はありますか?
編集
私の JavaScript では、jQuery を介してモデルのテキストを取得し、次のようにコーディングします
var model = $(".model-list li.active").text();
model = encodeURI(model);
だから私は取るlaravelルートを持っていますJavascript 呼び出しのエンコードされた文字列を取得し、それを PHFunction P に返します
public function versionsByYear($manufacturer, $year, $category, $model)
{
$manufacturer = str_replace(" ", "%20", $manufacturer);
$model = str_replace(" ", "%20", $model);
return $this->connect('manufacturer/'.$manufacturer.'/year/'.$year.'/category/'.$category.'/model/'.$model.'/versions');
}
次に、外部 API に CURL リクエストを行う別のリンクにリンクします
public function connect($method)
{
$url = $this->apiUrl . '/' . $method;
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => array('Token: ' . $this->token),
CURLOPT_RETURNTRANSFER => true
));
$out = curl_exec($ch);
curl_close($ch);
return $out;
}
API 自体は問題ではありません。アプリで失敗しているのとまったく同じハードコードされたモデル名を渡すと機能するためです。ルートで定義されたメソッドを完全に見つけることができなかったので、アプリは空の文字列を返します。l スラッシュとしてエンコードされた %20?
------------に答える------------
エンコードスラッシュは、PHP に渡す前に、Web サーバーによって通常のパス区切り文字としてデコードされる可能性があります。たとえば、Apache にはこれを許可する特定の設定があります: AllowEncodedSlashes On.
これを使用して、Apache がハードコードされたスラッシュを解析しないようにすることができます。
<VirtualHost 127.0.0.1:80>
ServerName site.example.com
AllowEncodedSlashes On
# ...
</VirtualHost>
------------に答える------------<
PHP ドキュメントには、ここで起こっていると思われることに対する非常に優れた解決策があります:
<?php
function myUrlEncode($string) {
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
$replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
return str_replace($entities, $replacements, urlencode($string));
}
?>
http://php.net/manual/en/function.urlencode.php
これは特殊文字です。
**これが探しているものでない場合は、ここにコードを投稿するか、何が起こっているのかを明確にする価値があるかもしれません.
タグ:
関連記事:
負荷分散 - Elixir Ecto データベース接続の問題を検出するにはどうすればよいですか?