2013-03-06 1 views
3

получил эту вещь пользователи приходит на мой сайт, и они имеют переменную в URL новый каждый раз, но концовка та же всегда /дп/Random ID/

http://mywebsite.com/?source=text&keyword=site.com/random-text/dp/10505/ 

Так что я пытаюсь сохранить это/дп/этот идентификатор/я думал об использовании что-то вроде:

$keywword = $_GET['keyword']; 

И некоторые, как извлечь случайный идентификатор, как в регулярных выражениях вы можете найти то, что находится между/dp/и/и сохранить в переменной, как $ id, чтобы использовать ее позже.

+1

Я бы сказал, что вам нужно, чтобы начать с действительным URL. Пробелы не допускаются в строке запроса, поэтому, если ваш случайный текст содержит эти или другие недопустимые символы, любой способ, который вы выберете, может сломаться. – jeroen

+0

@jeroen это было мое собственное изменение, которое имеет текст - так это моя вина! не знал этого :) –

+1

Если ваш запрос sting правильно закодирован, вы можете использовать любое из первых двух решений. – jeroen

ответ

10

Вы можете сделать что-то вроде:

$keyword = $_GET['keyword']; 
$foo  = explode('/', $keyword); 
$id  = $foo[3]; 

DEMO: http://codepad.org/CcOcwDa6


Я также собирался предложить РегВыр решение:

preg_match('/dp\/([^\/]+)\//', $url, $matches); 
$id = $matchs[1]; 

Хорошая вещь о решении регулярного выражения что если ваш параметр keyword когда-либо изменился, это все равно будет работать как lo В качестве идентификатора, который вам нужен, предшествует dp/.

DEMO: http://ideone.com/xqXU2b

+0

Это хорошо! Итак, это похоже на проверку третьего «/» и возвращает все после него? как насчет последнего? результаты будут выглядеть так? 10505/или 10505 (мне нужно без /) –

+0

Вы просто получите номер. Вот демонстрационный пример: http://codepad.org/CcOcwDa6 –

+1

Он превращает значение '$ _GET ['keyword']' в массив значений, разделенных символом '/'; в этом случае значение 10505 является значением. Поскольку '/' является разделителем, '$ foo [3]' не должен отображаться как '10505 /', а '10505'. Если вам нужно удалить символы, вы можете использовать ['str_replace'] (http://php.net/manual/en/function.str-replace.php). –

5

Или с регулярным выражением:

if (preg_match('/^.*\/dp\/([0-9]+)\/?$/i', $_GET['keyword'], $matches)) 
    var_dump($matches[1]); 
+0

Я вижу, что вы получили 0-9, это означает, что он не обнаружит буквы? Извините, что я включил только цифры, но иногда они получили письмо вроде A1512B23, это случайное :) –

+3

@MarkVoidale В этом случае вы можете заменить '[0-9] +' на '\ w +' – hjpotter92

1

Может быть, это будет делать трюк:

$keyword = $_GET['keyword']; 
$id = preg_replace('#^(?:.+)?\/dp\/([0-9]+)\/(?:.+)?$#', '$1', $keyword); 
+0

Я вижу, что вы получили 0 -9 это означает, что он не обнаружит буквы? Извините, что я включил только цифры, но иногда они получили письмо вроде A1512B23, это случайное :) –

+1

Если у вас есть буквы, просто измените '[0-9]' на '[a-z0-9]'. Это даст вам: '$ id = preg_replace ('#^(?:. +)? \/Dp \/([a-z0-9] +) \/(?:. +)? $ # I', '$ 1', $ keyword); '(я добавил опцию' i' после '#' из-за возможного случая) – Yoone

Смежные вопросы