0

我有这个网址https://www.industrialstores.com/search_results/Asco+8214G30+3%252F4%5C%5C%5C%220%252F5%23+Gas+Shutoff+Valve/46

但在上面,%23是在 url#之前Gas,并且在 php 中使所有的东西在这之后变得不可读。

当我尝试从查询字符串中获取s&的值时o,我没有得到任何值 foro和 for s,只Asco+8214G30+3%252F4%5C%5C%5C%220%252F5返回但它应该返回Asco+8214G30+3%252F4%5C%5C%5C%220%252F5%23+Gas+Shutoff+Valve

我正在使用 httaccess 重写来制作这个 url RewriteRule ^([a-zA-Z0-9_-]{3,100})/([^/]+)/([^/]+)?$ index.php?page= $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']));
4

3 回答 3

2

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

这在以下位置进行了解释: 我可以在我的服务器端应用程序(PHP、Ruby、Python 等)上读取 URL 的哈希部分吗?

你想得到这个#你必须使用像Slugify这样的库来对你的 url 进行 slugify/urlize,这将编码“奇怪”的字符。

例子:

use Cocur\Slugify\Slugify;

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

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

于 2013-11-21T14:19:05.963 回答
0

尝试使用 rawurlencode() 函数。

于 2013-11-21T14:21:56.363 回答
0

我通过在使用下面的代码对 url 进行 urlencoding 之前 转换#为更正了这一点,%23

str_replace("#","%23",$_REQUEST['search_keyword']); 
于 2013-11-24T21:48:03.617 回答