php ile bir url bir izole parçası

5 Cevap

Ben şu url varsa:

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

veya

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

Nasıl ayırabilirsiniz sadece bannana_cake ve fruit_cake Yukarıdaki örneklerden?

5 Cevap

Muhtemelen sadece özel bir durum için geçerlidir ve üretim için bir şey değil kolay yolu, kullanmak için basename-function:

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

"Banana_cake" url son parçasıdır ve son bölü arkasında hiçbir şey yoktur, çünkü bu sadece çalışır.

Bu kesinlikle bir arzu çözüm değildir ve sorgu dizesi sırayla ufak bir değişiklik şeyleri kıracak çünkü Luca MATTEIS 'cevabı, benim oyumu alacak.

ne bakıyorsun bir sorgu dizesi sadece mod_rewrite versiyonu gibi bir $ _GET değişken olacaktır

Değişken adı ne olduğunu görmek için bu deneyin:

<pre>
<?php print_r($_GET);?>
</pre>

Sen (tam girişi bulmak için Google) $ _SERVER [] dizi bakarak talep edilmiştir URL'sini görebilirsiniz. Onlar daha sonra [3] index ilgilendiğiniz URL parçası olacak, '/' bir diziye dize bölebilirsiniz

Eğik çizgilere url bölünmüş ve son bölümünü almak:

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

Tek sorun, size url bölü olması gerekir. Böyle olduğu için bir kontrol yapabilir:

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

Benim cevabım biraz daha uzun olacaktır. Bunu burada ben bunları yapar var (xs_Breakdown denir) bir sınıftan iki fonksiyonları bir pasajı var, URI Templates kullanarak benzer bir şey yapmak istiyorum gibi görünüyor. Kolayca (Ben yapmak için çok az muzdarip değilim gelecekte bir süre için yapılacaklar listesi üzerinde) joker karakterleri ve koşullu davranışı içerecek şekilde genişletilebilir. Kurulumu ve kullanımı ayarlama ilk ve örnek;

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

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

Kodu (kendi bazı toz kadar tekme yeterli olacaktır sadece temelleri;. Sizinle bütün mesele isterseniz tüm kod buraya göndermek için çok uzun olurdu bana bir mesaj Pop iç içe üç özellik / Java Bean- sınıflar gibi);

// 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 ;
    	}