使用PHP从url获取数据

时间:2015-01-17 06:50:58

标签: php url

我正在尝试搜索维基百科并在php中获得结果。当我在php文件中输入url作为硬编码字符串时,它会起作用,但如果我尝试将url作为参数,则返回:

["",[],[],[]]

以下是带有硬编码字符串的代码:

<?php
$opts = array('http' =>
  array(
    'user_agent' => 'User1 (http://www.exampe.com/)'
  )
);
$context = stream_context_create($opts);
$url = 'http://en.wikipedia.org/w/api.php?action=opensearch&search=yolo';
echo file_get_contents($url, FALSE, $context);
?>

以下是从其网址获取参数的版本:

<?php
$opts = array('http' =>
  array(
    'user_agent' => 'User1 (http://www.exampe.com/)'
  )
);
$context = stream_context_create($opts);
$url = $_GET['url'];
echo file_get_contents($url, FALSE, $context);
?>

这是我输入参数的方式:

http://example.com/test.php?url=http://en.wikipedia.org/w/api.php?action=opensearch&search=yolo

2 个答案:

答案 0 :(得分:1)

出现此问题是因为get-parameter包含具有特殊含义的字符,例如%,?,/ ,:和=。

解决方案:

  • 替换&amp; by%26
  • 替换/由%2F
  • 替换:by%3A
  • 更换?由%3F
  • replace = by%3D

还有更多字符需要替换,但您的网址中不会出现这种情况。

您的网址将变为

http://example.com/test.php?url=http%3A%2F%2Fen.wikipedia.org%2Fw%2Fapi.php%3Faction%3Dopensearch%26search%3Dyolo

您可以使用php函数urlencode

轻松完成此操作

答案 1 :(得分:0)

您必须在提交之前对查询字符串进行编码

http://example.com/test.php?url=http://en.wikipedia.org/w/api.php?action=opensearch&search=yolo

http://example.com/test.php?url=http%3A%2F%2Fen.wikipedia.org%2Fw%2Fapi.php%3Faction%3Dopensearch%26search%3Dyolo