Передать # как текст в строке запроса в php
У меня есть этот URL https://www.industrialstores.com/search_results/Asco+8214G30+3%252F4%5C%5C%5C%220%252F5%23+Gas+Shutoff+Valve/46
но выше, %23
является #
до Gas
в URL и делая все вещи после этого нечитаемыми в php.
Когда я пытаюсь получить значение s
& o
из строки запроса я не получаю никакого значения для o
и для s
, только Asco+8214G30+3%252F4%5C%5C%5C%220%252F5
возвращается, но должен вернуться Asco+8214G30+3%252F4%5C%5C%5C%220%252F5%23+Gas+Shutoff+Valve
Я использую httaccess rewrite, чтобы сделать этот URL RewriteRule ^([a-zA-Z0-9_-]{3100})/([^/]+)/([^/]+)?$ Index.php? Page=$1&s=$2&o=$3 [л]
И код для извлечения значения строки запроса как:
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']));
3 ответа
Я исправил это путем преобразования #
в %23
перед urlencoding URL, используя код ниже,
str_replace("#","%23",$_REQUEST['search_keyword']);
Вы не можете получить ничего после #, любой браузер удалит, потому что это якорь.
Это объясняется по адресу: Могу ли я прочитать хэш-часть URL-адреса в моем серверном приложении (PHP, Ruby, Python и т. Д.)?
Если вы хотите получить этот #, вы должны убить / URL-адрес своего URL с помощью некоторой библиотеки, такой как Slugify, это закодирует "странные" символы.
Пример:
use Cocur\Slugify\Slugify;
$slugify = new Slugify();//for iconv translit
echo $slugify->slugify('Hello World!'); // hello-world
Я думаю, что это лучше, чем позволить браузеру сделать простое кодирование URL.