Передать # как текст в строке запроса в 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.

Попробуйте использовать функцию rawurlencode().

Другие вопросы по тегам