【问题标题】:“&” being replaced by "& in php includephp include 中的“&”被“&”替换
【发布时间】:2023-04-02 08:50:01
【问题描述】:

我有一个 php 页面,它从另一个页面获得响应,如图所示:

while($response!=200)
{
$response = include 'xyz.php?one='.$one.'&two='.$two.'&three='.$three.'';
}

但我的链接总是这样:

domainname.com/xyz.php?one=content&two=content&three=content

由于&& 取代,我遇到了找不到页面的问题。

我试过用%26直接放&而不是&,都白费了。

除了使用PHP的字符串替换功能将&删除并替换为&之外,还有其他简单的解决方案

【问题讨论】:

  • 即使进行了替换,您也不应该找到未找到的页面。页面名称只有?之前的部分,后面都是URL参数。
  • 在这种情况下我会避免使用include(),看起来您想从 HTTP(s) 请求中获取响应。您可以使用file_get_contents('http://example.com/?one=....'); 对于include(),请查看Example 3。另外,不确定您的 $response 会不会是 200...
  • @MariosHadjimichael,我仍然收到警告:file_get_contents(Path) failed to open stream。
  • @Barmar,我收到警告:包含(路径)无法打开流:路径中没有这样的文件或目录。这里 xyz.php 是一个本地文件。
  • 访问本地文件时不能使用 URL 参数,只有通过网络服务器访问 URL 时才有意义。

标签: php regex url hyperlink


【解决方案1】:

查看html_entity_decode

$response = html_entity_decode($response)

【讨论】:

  • 他的问题不在于响应,而在于他试图从中获取响应的 URL。
【解决方案2】:

我根据您发送的代码进行了测试,没有问题。这表明您的 *.ini 文件中发生了一些自动魔术(魔术引号,也许......呃......)。尝试将字符串简单地创建为变量以将其从文件名上下文中删除并回显它以确保它是正确的,然后将该变量与您的 include 一起使用。

$one = 'abc';
$two = 'def';
$three = "ghi";
$file= 'xyz.php?one='.$one.'&two='.$two.'&three='.$three;
echo "\n\n".$file;
$response = include $file;

【讨论】:

    【解决方案3】:

    访问本地文件时不能使用 URL 参数,它们必须通过网络服务器。试试:

    $response = file_get_contents("http://localhost/path/to/xyz.php?one='.$one.'&two='.$two.'&three='.$three);
    

    【讨论】:

    • xyz.php 本身就是一个本地文件。在该文件中,我使用 REST API 返回一个值。 xyz.php 正确返回值,因为我在本地主机中手动运行它。
    • 访问本地文件时不能使用URL参数。
    • 在我上传文件进行托管时,localhost 不会导致问题?
    • 你不是也上传xyz.php吗?
    • 那应该没问题,因为localhost会在你上传的时候访问托管服务器。
    猜你喜欢
    • 1970-01-01
    • 2015-01-23
    • 2016-01-26
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多