PHP $ _GET和下划线

时间:2016-02-02 16:52:40

标签: javascript php regex

我有一段非常短的PHP用于从JavaScript发出HTTP请求。

$.get("grabber.php?url=" + "http://tidesandcurrents.noaa.gov/api/datagetter?station=8573364&begin_date=20160202&end_date=20160203&product=predictions&units=english&time_zone=gmt&format=json&application=poseidonweathercom+&datum=MLLW", function(forecast) {

    console.log(forecast);

});

我在一些项目中成功使用了它,但是在我当前项目中发出请求时遇到了问题。基于我的搜索,我相信它可能是由请求中的下划线引起的,虽然通过我的搜索而不知道PHP,我无法确认。

下面是我在JavaScript中做的一个例子:

{{1}}

如果我复制网址并将其放入浏览器中,我会收到我要求的JSON。当我使用上面的代码时,我最终收到来自NOAA的错误消息:

  

产品错误:产品不能为空或空错误时区:时区不能为空或空错误单位:单位不能为空或空错误格式:格式不能为空或空错误日期:beginDate不能为空或者空的

我是否需要在PHP中使用正则表达式作为下划线?还有其他一些我不明白的问题吗?

感谢。

2 个答案:

答案 0 :(得分:1)

你需要发送编码,它会将所有下划线/空格/&符号等转换成编码的等价物:

var url = "http://tidesandcurrents.noaa.gov/api/datagetter?station=8573364&begin_date=20160202&end_date=20160203&product=predictions&units=english&time_zone=gmt&format=json&application=poseidonweathercom+&datum=MLLW";

$.get("grabber.php?url=" + encodeURIComponent(url), function(forecast){
    console.log(forecast);
}

在该网址上使用encodeURIComponent()显示:

http%3A%2F%2Ftidesandcurrents.noaa.gov%2Fapi%2Fdatagetter%3Fstation%3D8573364%26begin_date%3D20160202%26end_date%3D20160203%26product%3Dpredictions%26units%3Denglish%26time_zone%3Dgmt%26format%3Djson%26application%3Dposeidonweathercom%2B%26datum%3DMLLW

或者,如果您只想访问JSON数据并在JavaScript函数中处理它,您可以直接通过URL检索数据,而无需对URL进行编码:

$.get("http://tidesandcurrents.noaa.gov/api/datagetter?station=8573364&begin_date=20160202&end_date=20160203&product=predictions&units=english&time_zone=gmt&format=json&application=poseidonweathercom+&datum=MLLW", function(forecast) {
    console.log(forecast);
});

答案 1 :(得分:0)

嗯,为什么你甚至需要你的PHP代码...下面的代码可以正常工作并消除你的服务器开销。

$.get("http://tidesandcurrents.noaa.gov/api/datagetter?station=8573364&begin_date=20160202&end_date=20160203&product=predictions&units=english&time_zone=gmt&format=json&application=poseidonweathercom+&datum=MLLW", function(forecast) {

    console.log(forecast);

});