在 URL 重写模式下的 GET 请求中,句点“.”不会进入 PHP 变量 [关闭]

Posted

技术标签:

【中文标题】在 URL 重写模式下的 GET 请求中,句点“.”不会进入 PHP 变量 [关闭]【英文标题】:Period " . " doesn't come into PHP variable in GET requests in URL Rewriting mode [closed] 【发布时间】:2018-08-20 09:38:55 【问题描述】:

当我从浏览器 URL 栏中输入一个值时,该值通过 GET 请求进入一个 php 变量并按预期显示该值,但这里的问题是当我输入一个带有句点 的值时。 在值的末尾,仅显示值,但不显示句点。如何解决这个问题?我希望它显示带有句点的值。 以下是我的代码:

if (isset($_GET['value'])) // value comes from the browser URL bar
$val = $_GET['value'];
echo $val;

问题更新 我忘了提到我正在使用 URL 重写模式,当我通过 URL 重写模式获取值时会发生这种情况。但是,当我从包含参数名称 (index.php?value=) 的原始 URL 获取值时,点会按预期显示。

页面名称 index.php

if (isset($_GET['value'])) // value comes from the browser URL bar
$val = $_GET['value'];
echo $val;

我的 .htaccess 文件

RewriteEngine On
RewriteRule ^index/([a-z0-9_/.]+)/?$ /review/index.php?value=$1 [L]

查看第一个输出:如果我将句点放在值的末尾,则仅显示该值。但在示例二中:如果我在值的中间包含句点,则该值与句点一起显示。为什么会这样?

输出

【问题讨论】:

请说明您是如何传递网址的。您对参数进行 urlencode 吗? 请添加给出的 URL 示例、预期内容和收到的内容。 我不是通过php传值,我是直接从浏览器网址栏传过来的 @AnthonyB 好的。等一下 你会得到一个带有该代码的PHP Parse error,在echo $val中缺少一个; 【参考方案1】:

我有一个解决方案。因为我没有得到值末尾的句点,所以我想出了一个使用 PHP 的 SERVER 变量的解决方案。我通过$_SERVER['REQUEST_URI'] 获取当前页面的完整网址,然后分解它们并获取查询字符串。下面是它的方法。

<?php
$getQueryString = explode("/",$_SERVER['REQUEST_URI']);

echo getQueryString[3]; 

下面是我在值末尾得到句点的输出。见

【讨论】:

如果你正在寻找数组的最后一部分,你会使用end($getQueryString),所以即使你在结尾之前添加一个部分,你的代码也会继续工作。 另外,我已经在我的本地复制了您的问题中的整个示例,使用域 .htaccess,并且效果很好。 @AnthonyB 你是什么意思?您是否尝试了我在问题中添加的整个示例,然后它对您很有效?你的意思是当你输入一个以句点结尾的值时,你可以在浏览器中看到它和句点作为输出? 我使用 PHP 7.2.2 在我的 MAMP 实例上创建了一个域“sotest.local”。我创建了一个文件index.php,并使用了您的.htaccess 文件。所以例子是一样的。我已经用参数truc. 进行了测试,最后有一个句点,句点在变量中。我在浏览器中看到过。 @AnthonyB 那你知道我的浏览器没有出现的原因吗?我记得有人还说这个也很适合他们

以上是关于在 URL 重写模式下的 GET 请求中,句点“.”不会进入 PHP 变量 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何为 GET 请求正确配置 Apache 重写规则?

在遗留应用程序中使用 url 重写来改造 csrf

如何使用 Apache 在代理设置中重写位置响应标头?

thinkphp 3.2.3在nginx+php下的url重写配置经验

路由与 URL 重写 (IIS7) 性能

如何在php中重写Get变量的url [重复]