Php JSON符号转换导致错误
当我试图解析我的地理代码链接时,由于amp;陈述在我“json_decode”字符串之前,我有一个名为www.something.com/something?bla=bla&sensor=true的链接,但当我将其作为参数发送到函数时,它的&character正在转换为Php JSON符号转换导致错误,php,geocode,ampersand,Php,Geocode,Ampersand,当我试图解析我的地理代码链接时,由于amp;陈述在我“json_decode”字符串之前,我有一个名为www.something.com/something?bla=bla&sensor=true的链接,但当我将其作为参数发送到函数时,它的&character正在转换为&。链接如 http://maps.googleapis.com/maps/api/geocode/json?address=Bekirdere,%20%C4%B0zmir&sensor=true 工作正常,但链
&代码>。链接如
http://maps.googleapis.com/maps/api/geocode/json?address=Bekirdere,%20%C4%B0zmir&sensor=true
工作正常,但链接类似
http://maps.googleapis.com/maps/api/geocode/json?address=Bekkirdere,%20%C4%B0zmit&sensor=true
没有给出任何结果。(&
转换为&
)
我怎样才能阻止它被转换
我的解析器函数:
function get_url_contents($url)
{
$url = str_replace(' ', '%20', $url);
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL,$url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
$ret = curl_exec($crl);
curl_close($crl);
return $ret;
}
function __construct($url)
{
$json = $this->get_url_contents($url);
$this->_jsonArray = json_decode($json, true);
}
PHP函数比str_替换更好,您应该只对URL中属于GET值的部分进行编码;您不应该对整个URL进行编码,因为正如您所指出的,这也会对将变量彼此分离的符号进行编码
您需要构建如下URL:
$url = 'http://maps.googleapis.com/maps/api/geocode/json?address=';
$url .= urlencode('Bekirdere, Izmir');
$url .= '&sensor=true';
然后按照上面的方法执行curl
调用
我已经测试了下面的测试脚本,它可以正常工作:
$url = 'http://maps.googleapis.com/maps/api/geocode/json?address=';
$url .= urlencode('Bekirdere, Izmir');
$url .= '&sensor=true';
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL,$url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
$ret = curl_exec($crl);
curl_close($crl);
$returned_data = json_decode($ret, true);
var_dump($returned_data);
您需要将其融入您的代码结构或重构您的类,以接收$address
参数(例如“Izmir,Turkey”),而不是完整的URL(现在的情况)。这样,在构建完整的URL以传递给curl
之前,您就可以避开地址部分。您的问题与JSON编码/解码无关。在页面上回显您的URL和“查看源代码”,您将看到它是&代码>一直。我确实回显了它,是的,它有“amp;”但是当我访问带有amp;上面写着“请求被拒绝”。但是,如果我手动将“amp;”替换为“&”,链接将返回正确的结果代码>在那里。它的出现是因为在代码中的某个地方,您正在使用htmlspecialchars()
或类似代码对URL进行编码。如果您正在输出HTML或XML,这将是正确的,但是由于您直接使用URL,因此您就有问题了。你应该放弃这个问题,创建一个与你的问题相关的新问题。我很感激你的回答,但我不知道编码地址会有什么帮助?最后,这没有帮助。也许我误解了这个问题。您的curl
请求失败是因为Google无法处理包含转义符号的请求URL吗?通过只对URL中需要编码的部分进行编码,curl
将请求不带转义符号的页面,从而成功返回JSON(当您JSON\u decode()
it时会有结果)。它过去可以工作,但现在不行了。我认为,这与编码有关。因为当我手动访问页面时(使用replacement&;to&manually),页面返回值。这对我来说绝对是一样的,curl应该以完全相同的方式工作。如果只对邮政地址(“Bekirdere,Izmir”)进行编码,URL中的符号将保持未编码状态,因此,您将获得预期的JSON。你试过了吗?没有用。我只删除了str_replace发生的行。我是否应该删除任何其他行以防止编码?