|
|
|
| Подскажите пожалуйста, как вообще убрать "page=..." из строки, состоящей из URL адреса страницы.
Строка может состоять только из URL адреса, например:
1) http://www.....ru/car/automobil_legkovaya.php?page=2&marka=vaz
2) http://www.....ru/car/automobil_legkovaya.php?marka=vaz&page=2
2) http://www.....ru/car/automobil_legkovaya.php?page=2
Возможные варианты URL адреса:
1) значение "page=..." может быть только какое либо целое число (номер страницы);
2) "page=..." может находится в любом месте: после "?", после "&", между "&".
3 ) "page=..." может вообще не быть в URL адресе.
P.S. Необходимо сделать возврат на строку с которой пришел посетитель (внутри сайта), но без "page=..." | |
|
|
|
|
|
|
|
для: sega_z
(18.05.2012 в 12:22)
| | preg_replace с выражение /&?page=[0-9]+/i | |
|
|
|
|
|
|
|
для: mihdan
(18.05.2012 в 12:37)
| | Страницу я вытаскиваю при помощи:
$url = $_SERVER['HTTP_REFERER']; // получает URL, с которого пришёл посетитель
preg_match_all("#(http)?([^:/]+)#",$url,$match);
$url_host = $match[0][1]; // Корневой каталог
$url_host_katalog = $match[0][2]; // Каталог
$url_host_stranica = $match[0][3]; // Страница (c ?razd=...)
|
А можно, как то вышеуказанное условие добавить в строку:
preg_match_all("#(http)?([^:/]+)#",$url,$match);
| (чтобы упростить код).
Или возможно только так:
$url = $_SERVER['HTTP_REFERER']; // получает URL, с которого пришёл посетитель
preg_match_all("#(http)?([^:/]+)#",$url,$match);
$url_host = $match[0][1]; // Корневой каталог
$url_host_katalog = $match[0][2]; // Каталог
$url_host_stranica = $match[0][3]; // Страница (c ?razd=...)
$url_host_stranica = preg_match_all("/&?page=[0-9]+/i",$url_host_stranica);
|
| |
|
|
|
|
|
|
|
для: sega_z
(18.05.2012 в 12:48)
| | Смысл парсить УРЛ регулярками? Есть же parse_url, parse_str.
А выражение вы можете поставить в удобное для вас место. | |
|
|
|
|
|
|
|
для: mihdan
(18.05.2012 в 12:53)
| | Код выдал ошибку: preg_match_all() expects at least 3 parameters, 2 given
$url = $_SERVER['HTTP_REFERER']; // получает URL, с которого пришёл посетитель
preg_match_all("#(http)?([^:/]+)#",$url,$match);
$url_host = $match[0][1]; // Корневой каталог
$url_host_katalog = $match[0][2]; // Каталог
$url_host_stranica = $match[0][3]; // Страница (c ?razd=...)
$url_host_stranica = preg_match_all("/&?page=[0-9]+/i",$url_host_stranica);
|
А чем лучше parse_url, parse_str? | |
|
|
|
|
|
|
|
для: sega_z
(18.05.2012 в 13:02)
| | Разбор рег. выражениями, операции затратные. | |
|
|
|
|
|
|
|
для: confirm
(18.05.2012 в 13:05)
| | Предыдущую ошибку нашел, но в результате остается знак "&": http://www.....ru/car/automobil_legkovaya.php?&marka=vaz
$url = $_SERVER['HTTP_REFERER']; // получает URL, с которого пришёл посетитель
preg_match_all("#(http)?([^:/]+)#",$url,$match);
$url_host = $match[0][1]; // Корневой каталог
$url_host_katalog = $match[0][2]; // Каталог
$url_host_stranica = $match[0][3]; // Страница (c ?razd=...)
$url_host_stranica = preg_replace("/&?page=[0-9]+/i","",$url_host_stranica);
|
Не знаю,как его убрать? | |
|
|
|
|
|
|
|
для: sega_z
(18.05.2012 в 13:07)
| | Открываем руководство по РНР и читаем о функциях parse_url и parse_str, после чего выбрасываем preg_replace из данной задачи. Ну не место ей тут, если это можно сделать проще. | |
|
|
|
|
|
|
|
для: confirm
(18.05.2012 в 13:43)
| | Ну хорошо, вытащил я страницу с помощью parse_url и вытащил значение "page" с помощью parse_str:
$url = $_SERVER['HTTP_REFERER']; // получает URL, с которого пришёл посетитель
$url_host_stranica = parse_url($url, PHP_URL_QUERY); // вытаскиваем из URL все данные после ?
$url_host_stranica = parse_str($url_host_stranica);
|
И что дальше, как избавиться то от "page=..." в URL адресе? | |
|
|
|
|
|
|
|
для: sega_z
(18.05.2012 в 14:35)
| | А все, никак, ловушка. )
<?
$url = 'http://www.domain.ru/car/automobil_legkovaya.php?page=2&marka=vaz&var1=33&var2=14';
$url = parse_url($url);
parse_str($url['query'],$query);
$url = $url['scheme'].'://'.$url['host'].$url['path'].'?'.http_build_query(array_diff_key($query, array('page'=>1)));
echo $url;
|
| |
|
|
|
|
|
|
|
для: confirm
(18.05.2012 в 15:02)
| | Да действительно ловушка :) Я бы до этого не додумался. Я даже не понял логический смысл этого кода.
Т.е. Вы хотите сказать, что этот код намного легче и проще вышеуказанного с рег. выражениями? | |
|
|
|
|
|
|
|
для: sega_z
(18.05.2012 в 15:36)
| | Вы прочтите о механизме разбора рег. выражениями.
Можно загрузить процессор длинной инструкцией, что вроде бы хорошо на первый взгляд, а можно заменить эту инструкцию большим числом инструкций, но коротких и не требующих сложной адресации. И второе будет выполнено быстрее, и это не парадокс. Именно эта концепция положена в архитектуру RISC процессоров, которые теперь являются неотъемлемой частью современных процессоров.
Ну а о том, что я написал нужно не додумываться, а чаще заглядывать в руководство РНР, в нем можно найти ответы на многие свои вопросы. Вы прочтите о тех функциях, которые я применил. | |
|
|
|
|
|
|
|
для: confirm
(18.05.2012 в 15:46)
| | Никак не могу понять, как изменить данный код, чтобы в итоге осталось: car/automobil.php?page=2&marka=vaz&var1=33&var2=14 (без http://, домена и слеша после домена )
$url = 'http://www.domain.ru/car/automobil.php?page=2&marka=vaz&var1=33&var2=14';
$url = parse_url($url);
parse_str($url['query'],$query);
$url = $url['scheme'].'://'.$url['host'].$url['path'].'?'.http_build_query(array_diff_key($query, array('page'=>1)));
echo $url;
|
| |
|
|
|
|
|
|
|
для: sega_z
(20.05.2012 в 22:44)
| | Когда же вы читать начнете.
<?
$url = 'http://www.domain.ru/car/automobil.php?page=2&marka=vaz&var1=33&var2=14';
$url = parse_url($url);
print_r($url);
?>
Array (
[scheme] => http
[host] => www.domain.ru
[path] => /car/automobil.php
[query] => page=2&marka=vaz&var1=33&var2=14 )
|
А значит, вам нужно только то, что содержат ключи "path" и "query" этого массива. Причем не обязательно, использовать array_diff_key($query, array('page'=>1)) в вашем случае, если вам нужно будет удалить только один ключ в массиве, достаточно будет unset($query['page']):
<?
parse_str($url['query'],$query);
unset($query['page']);
echo $url['path'].'?'.http_build_query($query);
| Если требуется удалить несколько ключей из множества, тогда и поможет array_diff_key(). | |
|
|
|
|
|
|
|
для: confirm
(21.05.2012 в 00:33)
| | Как тем же самым методом вытащить только название каталога "car" после домена:
<?
$url = 'http://www.domain.ru/car/automobil.php?page=2&marka=vaz&var1=33&var2=14';
parse_url($url, PHP_URL_PATH);
?>
|
так вытаскивает каталог вместе с страницей
Или можно только регуляркой вытащить?
preg_match_all("#([^:/?]+)#",$url,$match);
echo $match[0][1]."<br>"; // Корневой каталог
echo $match[0][2]."<br>"; // Каталог
echo $match[0][3]."<br>"; // Страница (без ?id=...)
|
| |
|
|
|
|
|
|
|
для: sega_z
(21.05.2012 в 13:21)
| | parse_url($url, PHP_URL_PATH); - это для работы вы пишите или для отчетности?
<?
$path = explode('/',ltrim(parse_url($url, PHP_URL_PATH),'/'));
print_r($path);
|
| |
|
|
|