在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调用,参数错误