изолирующая часть url с php - PullRequest
0 голосов
/ 09 октября 2009

Если у меня есть следующий URL:

http://URL/products/38/293/bannana_cake/

или

htp://URL/products/38/293/fruit_cake/

Как мне выделить bannana_cake и fruit_cake из примеров выше?

Ответы [ 6 ]

3 голосов
/ 09 октября 2009
<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';    
print_r(parse_url($url));    
echo parse_url($url, PHP_URL_PATH);
?>

А затем используйте explode() в элементе path. Например:

<?php
$url = 'http://URL/products/38/293/bannana%5Fcake/';
$a = parse_url($url);
$p = explode('/', $a['path']);
echo $p[4];
?>
1 голос
/ 09 октября 2009

Вероятно, самый простой способ, который применим только к вашему особому случаю, а не для производства, - это использовать basename-function :

<?php
echo basename("http://url/products/38/293/banana_cake/"); // Produces "banana_cake"
?>

Это работает только потому, что "banana_cake" является последней частью URL, и за последней косой чертой ничего нет.

Это определенно не желаемое решение, и ответ Луки Маттеиса получит мой голос, потому что малейшее изменение порядка строк запроса сломает вещи.

0 голосов
/ 09 октября 2009

Мой ответ будет немного длиннее. Похоже, вы хотите сделать что-то похожее на использование URI Templates , так что вот фрагмент из двух функций из класса (называемый xs_Breakdown), который у меня есть, который выполняет эти вещи. Это может быть легко расширено, чтобы включить подстановочные знаки и условное поведение (в списке задач какое-то время в будущем я страдаю от слишком малого количества дел). Во-первых, и пример настройки и использования;

   $br = new xs_Breakdown ( '{first}/{second}/{third}/{fourth}/{fifth}/{andsoon}' ) ;

   // Pick out the template variable called 'third'
   $third = $br->third ;

Код (только основы, которых должно быть достаточно, чтобы поднять часть вашей собственной пыли; весь код будет слишком длинным, чтобы публиковать здесь. Напишите мне сообщение, если вы хотите весь шебанг с тремя вложенными свойствами / Java Bean-подобные классы);

// Static variable to hold our tokens
$_tokens = null ;

// Input path (set in constructor)
$_path = null ;

// Results here
$values = array() ;

function parse ( $schema = '' ) {

            // Sanitize input data : Regular Expression
            $regexp = '/[^a-z0-9 +\-\/!$*_=|.:]/i' ;

            // Break our path into little bits
            $break = explode ( '/', $this->_path ) ;

            // Find the tokens used from our schema template
            $this->_tokens = $this->getSubStrs ( "{","}", $schema ) ;

            // Loop through the path elements
            foreach ( $break as $key => $value ) {

                // Sanitize the value of the element
                $value = urldecode ( trim ( preg_replace ( $regexp, '', $value ) ) ) ;

                // Element not blank? (Meaning, real text)
                if ( $value != '' )

                    // Index it!
                    @$this->values[$this->_tokens[$key]] = $value ;

            }

        }

        function getSubStrs ( $from, $to, $str, &$result = array () ) {

            if ( strpos ( $str, $from ) !== false ) {

                $start = strpos ( $str, $from ) + 1 ;
                $end = strpos ( $str, $to ) - 1 ;

                $item = substr ( $str, $start, $end - $start + 1 ) ;
                $rest = substr ( $str, $end + 2 ) ;

                $result[] = $item ;

                $this->getSubStrs ( $from, $to, $rest, $result ) ;

            }

            return $result ;
        }
0 голосов
/ 09 октября 2009

Разбейте URL на косые черты и получите последнюю часть:

$parts = explode('/', $url);
echo $parts[sizeof($parts) - 2];

Единственная проблема, вы должны иметь косую черту в URL. Вы можете проверить это следующим образом:

$parts = explode('/', $url);
echo ($parts[sizeof($parts) - 1])
    ? $parts[sizeof($parts) - 1]
    : $parts[sizeof($parts) - 2];
0 голосов
/ 09 октября 2009

Вы можете увидеть запрошенный URL, посмотрев массив $ _SERVER [] (Google, чтобы найти точную запись). Если вы можете разбить строку на массив в '/', тогда индекс [3] будет частью интересующего вас URL.

0 голосов
/ 09 октября 2009

это будет переменная $ _GET, поскольку то, на что вы смотрите, это просто версия mod_rewrite строки запроса

попробуйте это, чтобы увидеть, как называется переменная:

<code><pre>
<?php print_r($_GET);?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...