在php的querystring中将#作为文本传递

在php的querystring中将#作为文本传递,php,query-string,querystringparameter,Php,Query String,Querystringparameter,我有这个网址 但是在上面,%23在url中是#之前的

我有这个网址

但是在上面,
%23
在url中是
#
之前的
,这之后的所有内容在php中都不可读

当我试图从查询字符串中获取
s
o
的值时,我没有得到
o
s
的任何值,只有
Asco+8214G30+3%252F4%5C%5C%5C%5C%220%252F5
返回,但它应该返回
Asco+8214G30+3%252F4%5C%5C%5C%525%23+气体+关闭+阀门

我正在使用httaccess重写来创建此url 重写规则^([a-zA-Z0-9_-]{3100})/([^/]+)/([^/]+)?$index.php?页面=$1&s=$2&o=$3[L]

和获取查询字符串值的代码,如下所示:

if(isset($_GET['s'])){

$search_keyword=str_replace("_"," ",$_GET['s']);
}
if(isset($_GET['o']) && $_GET['o'] !=''){
$searchin = $_GET['o'];
}
以及设置查询字符串值,如下所示:

$keyword = urlencode(str_replace("/","%2F",$_REQUEST['search_keyword']));

在#之后无法检索任何内容,任何浏览器都将被删除,因为这是一个锚点

这方面的解释如下:

你想要得到这个#你必须用一些库对你的url进行slagify/urlize,这样会对“奇怪”字符进行编码

例如:

use Cocur\Slugify\Slugify;

$slugify = new Slugify();//for iconv translit
echo $slugify->slugify('Hello World!'); // hello-world

我认为这比让浏览器进行简单的url编码要好。

尝试使用rawurlencode()函数。

我通过将
转换为
%23
,然后使用下面的代码对url进行url编码

str_replace("#","%23",$_REQUEST['search_keyword']); 

首先,你为什么会有这个URL,你能澄清哪里出了问题吗?可能是重复的,你能到这里吗?我正在将s&o的值传递给ajax,你可以检查传递了哪些参数,以了解确切的问题Urldecode也返回这个“Asco 8214G30 3/4”0/5“不全是的。此函数用于转义特殊字符。在目标代码上,使用rawurldecode。echo rawurlencode('123#321');//123%23321-%23是十六进制的#在url中已经是“%23”十六进制的,但是当我解码它时,#之后的所有文本都不会返回原始文本是什么?当我尝试:[
code
]echo rawurldecode(“Asco+8214G30+3%252F4%5C%5C%5C%220%252F5%23+气体+切断+阀门/46”);php return:[
code
]Asco+8214G30+3%2F4\\\\“0%2F5\\+气体+关闭+阀门/46原始文本是Asco 8214G30 3/4\“0/5”气体关闭阀您可以转到此处,将此文本放入搜索框,然后单击搜索按钮,在该页面上找不到任何记录,我正在将此查询字符串参数传递给ajax,您可以检查ajax调用,参数错误