1

私は以下のフォームにURLを持っています

http://www.site.com/index.php?q=foo boo

クロムを介してURLにアクセスすると、クロムはそれを適切に変換します

http://www.site.com/index.php?q=foo%20boo

最初の URL で file_get_contents を使用すると、URL が正しく読み取られませんが、次の URL を使用すると問題ありません

http://www.site.com/index.php?q=foo boo

最初のリンクのスペースなどのすべての特殊文字を最後のリンクのように適切に変換するには、最初のリンクを最後のリンクに変換するためにどのphp関数/関数を使用する必要があります か?

4

2 に答える 2

2

PHP を使用できますrawurlencode()

http://www.php.net/manual/en/function.rawurlencode.php

于 2012-07-26T18:47:41.443 に答える
0

改行可能なスペースを HTML エンティティに置き換えるよりも安全な選択は、\xA0ASCII 文字に置き換えることです。それらは実質的に同等です。の&文字はURLパラメータ区切り文字と見なされるため、 問題が発生する可能性があります。次のアルゴリズムは、おそらく探していることを実行できます。

$url = 'http://www.site.com/index.php?q=foo boo&r=fii bii';
echo str_replace("\x20", "\xA0", $url);
// result: http://www.site.com/index.php?q=foo boo&r=fii bii (spaces are non-breakable)
echo str_replace("\x20", " ", $url);
// result: http://www.site.com/index.php?q=foo boo&r=fii bii

より複雑なアルゴリズム:

echo preg_replace_callback('/[\?&]\w+=([^&]+)/', create_function(
    '$matches',
    'return str_replace("\x20", "\xA0", $matches[0]);'
  ), $url);
// result: http://www.site.com/index.php?q=foo boo&r=fii bii (spaces are non-breakable)

そして、これらのパラメータが抽出されると:

$arr = parse_url($url);
parse_str($arr['query'], $arr);
var_export($arr);
// result for \xA0  : array ( 'q' => 'foo boo', 'r' => 'fii bii', )
// result for  : array ( 'q' => 'foo', 'nbsp;boo' => '', 'r' => 'fii', 'nbsp;bii' => '', ) // triple `&` in conflict
于 2012-07-26T20:47:37.747 に答える