这个URL需要urlencoding在哪里?

问题描述:

我托管了一个我在亚马逊网络服务上工作的网站,由于某些原因,我在本地在本地主机上运行它时出现了一些问题。这个URL需要urlencoding在哪里?

的那些东西

if (array_key_exists("error", $json)) 

功能和

file_get_contents功能。

伊夫注释掉阵列键存在一部分,解决了这个问题,至少登录的那一部分,直到我到视图中的文档页面,苗条的应用程序显示错误

failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

和问题针对在于viewdocspage.php文件,特别是这样的代码:

<?php 
       $raw = file_get_contents("http://cosoft.us-east-1.elasticbeanstalk.com/cosoft/mywiki/api.php?action=query&list=allpages&format=json"); 
       $pages_response = json_decode($raw, true); 
       $pages_array = $pages_response["query"]["allpages"]; 
       $page_titles = []; 

我看了一下,许多线程读取了该问题在于在该网址中包含特殊字符,如空格的file_get_contents(其我没有)等需求进行编码,使用进行urlencode(或rawurlencode ..?)

现在我用尽编码整个URL这样的:

$raw = file_get_contents(urlencode("http://cosoft.us-east-1.elasticbeanstalk.com/cosoft/mywiki/api.php?action=query&list=allpages&format=json")); 

但导致这个错误: slim error

Message: file_get_contents(http%3A%2F%2Fcosoft.us-east-1.elasticbeanstalk.com%2Fcosoft%2Fmywiki%2Fapi.php%3Faction%3Dquery%26list%3Dallpages%26format%3Djson): failed to open stream: No such file or directory


我想这可能会发生,因为我读了并不是所有的URL都应该被这个编码包装,而是继承人Im卡住了:我使用哪个url部分编码在?唯一的特殊字符,我不断地来关于这个错误accross是空格,但我没有任何空格,所以它的东西,我不知道它是什么...

帮助表示赞赏,谢谢!

+0

很好。即使有尽可能详细的组织和独特的问题,我得到一个downvote没有解释。 smh – masterofcatastrophe

+0

哇... 2更多downvotes。有人可以解释吗? – masterofcatastrophe

+0

我猜怀疑可能是因为你听到了马蹄声,而你正在寻找一匹斑马,同时忽略了盯着你的那匹马:'http://cosoft.us-east-1.elasticbeanstalk.com/cosoft/ mywiki/api.php?action = query&list = allpages&format = json'确实返回404 Not Found。你有一个无效的URL,或者你的IP受限制,或者你没有发送证书......但这不是一个urlencoding问题。 URL中没有任何内容需要编码(通常在'?the_keys = and_values_in&ur = query_string'上使用,但不在?=&分隔它们)。 –

你只需要url_encode参数。假设您有一个值$value='My name is earl' 如果您想将此值作为url http://somesite.com/?name=$value中的参数传递,那么url_encoded的值中会有空格。因此,如果将其编码为'http://somesite.com/?name='.urlencode($value),则编码时该值将变为My+name+is+earl

+0

所以在那个URL我有,什么是参数和URL编码应该在哪里完成?因为我知道如何使用它的空间,但我没有我的空间,所以我不知道哪些特殊字符需要它在我的问题 – masterofcatastrophe

+1

您正在使用一个硬编码的URL没有特殊字符,需要编码。不需要url_encode即可保留您的网址。你得到那个404错误的原因是因为这个页面不存在。我只是在浏览器中访问它,并得到了404错误 – ksealey

+0

@masterofcatastrophe:未能打开流:没有这样的文件或目录 – Sbpro

从URL读取资源可能受服务器配置的限制。 http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

您应该为此使用CURL。

+0

我也看到CURL是一个建议的解决方案,但它看起来很简单使用urlencode。我真的不知道如何在这里实现CURL,而且fopen已经启用,因为在localhost服务器上运行它工作正常,它只是AWS,它给出了问题 – masterofcatastrophe

+0

这不是问题在这里。错误将会完全不同,如果你阅读代码,你会发现他们显然已经破坏了URL,这就是它不存在的原因。 – Brad

+0

甚至可以使用CURL正确管理参数。 此外,url fopen通常是禁用的,所以他会在某个时候遇到问题 – ehwas