【问题标题】:file_get_contents and &file_get_contents 和 &
【发布时间】:2012-09-10 11:25:05
【问题描述】:

所以这似乎是一个常见的错误,但我已经尝试了所有方法,但它不起作用!

我的代码目前如下所示:

$apikey = "XXXXXXXXX";
$search_url = "https://www.googleapis.com/shopping/search/v1/public/products?key=$apikey&country=US&q=$item_title&restrictBy=gtin&alt=json";

$response = file_get_contents($search_url);

我已经尝试了从 urldecode 到 html_entity_decode/encode 到几乎所有我能找到的解决方案,但仍然得到相同的错误:

file_get_contents(https://www.googleapis.com/shopping/search/v1/public/products?key=XXXXX&country=US&q=THESTRING&restrictBy=gtin&alt=json) failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

如你所见,我得到的是 &amps 而不是普通的 ol' & (&)

我记得有一个类似的问题,问题只是我在字符串的开头没有“http://”。但如您所见,这里并非如此。

谢谢!

【问题讨论】:

  • 你能检查你的 php.ini 文件中是否启用了 allow_url_fopen 吗?或尝试其他网址,例如 $query=file_get_contents('youtube.com/watch?v=XiFrfeJ8dKM');
  • allow_url_fopen = On in php.ini 当我执行 file_get_contents("google.com") 时,我没有收到任何错误(并且打印 $response 按预期工作)。即使执行 file_get_contents("google.com/imghp?hl=en&tab=wi") 也有效
  • 它们没有被更改为&s,这只是为了在浏览器中正确格式化您的错误消息。

标签: php url


【解决方案1】:

您是否尝试过单引号,以便您的测试字符串按字面意思理解?如

$search_url = 'https://www.googleapis.com/shopping/search/v1/public/products?key='.$apikey.'&country=US&q=$item_title&restrictBy=gtin&alt=json';

【讨论】:

  • 是的,我试过了,但没有用。但是我发现了什么有效(愚蠢的我)-我传入的字符串 &q=$item_title 中有空格。我需要找到一种方法将它们翻译成可以工作的东西(可能是加号?),但这基本上是导致问题的原因......
  • 现在看来问题是,当我传递一个带有空格的项目标题时,它会给出这个错误。我尝试“引用”该项目(单项和双项),将空格转换为 %20 和加号,但它似乎不起作用......有什么想法吗?
  • 你试过 cURL 吗? curl 比 file_get_contents 更快更好。你可以粘贴带有值的 URL 没有 apikey 吗?
  • 好的,找到问题了。将 $item_title 中的空格转换为加号 did 工作。 strtr( $item_title, " ", "+" );谢谢大家的帮助!
【解决方案2】:

尝试从参数中删除空格,例如我的情况:

search_jobs.php?catagory_select=1&keys=head of IT 

“IT 主管”一词之间有空格时,它不起作用

search_jobs.php?catagory_select=1&keys=head-of-IT

我已经用“-”破折号替换了空格,它现在可以工作了。

如果您认为需要在脚本中进行大量更改以替换所有空格,那么这里有一个快速打开页面的方法,就像我打开页面一样:

“search_jobs.php?catagory_select=1&keys=IT 主管”

现在要从参数“IT主管”中自动替换空格,您需要在加载页面“search_jobs.php”上添加javascript代码

    <script>
if(location.href.indexOf('%20') > -1){
    location.href = location.href.replace('%20','-');
}
    </script>

在页面顶部添加此代码,它将在打开页面之前自动将空格替换为“-”破折号。

谢谢

【讨论】:

    【解决方案3】:

    我的问题的答案很简单:

    当 $item_title 包含空格时,PHP 抛出错误。为了解决这个问题,我所要做的就是将它添加到我的代码中:

    strtr( $item_title, " ", "+" );
    

    将空格更改为加号。不再有失败的请求!

    谢谢大家。

    【讨论】:

      猜你喜欢
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多