Url değiştirilmesi

6 Cevap php

Ben bazı güzel adresler yapmaya çalışıyorum.

CREATE TABLE IF NOT EXISTS `games` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(200) DEFAULT NULL,
`about` text,
`release_date` int(10) NOT NULL DEFAULT '0'

php

$id = str_replace('_', ' ', $_GET['title']);
$query = mysql_query("SELECT * FROM games WHERE title = '$id'");
$row = mysql_fetch_assoc($query);

if (!mysql_num_rows($query)) exit('This game is not in the database.');

Karakterleri değiştirilmesi ile bazı yardıma ihtiyacınız var.

Benim oyunlarından biri unvanını diyelim edilir Day of Defeat: Source i would like to access it with this: Day_of_Defeat_Source . How would I do that? Removing colons, -, & and all that with nothing. Now its: Day_of_Defeat:_Source

Ben değiştirin ama: _ ile bu gibi görünecektir: Day_of_Defeat__Source

Nasıl bu etrafında gidebilir?

Benim ucuz İngilizce için üzgünüm, belki ve moderatör bu daha understanable yapabilirsiniz.

6 Cevap

Yani, ':' '' ile boş dizesini değiştirmek - kim orada başka altını koymak zorunda diyor?

$addr = "Day of Defeat: Source";
$search = array(" ", ":"); 
$replace = array("_", ""); 
$new_addr = str_replace($search, $replace, $addr);

$ Arama her değeri $ addr aranır ve bulunur durumda $ dan gelen değeri ile değiştirilmesi durumunda yerini edilecektir.

Yani bu durumda _ "ile değiştirilir", "olacak", ve ":" "ile değiştirilir", yani Day_of_Defeat_Source alacak

Alo Eğer diziler $ arama için herhangi bir karakter ekleyebilir ve $ değiştirin.

Sen URL-encode o, ve sonra URL-decode kullanarak okuyabilir.

"Day of Defeat: Source" "Gün% 20of% 20Defeat% 3A% 20Source" olacaktır.

Ne olursa olsun karakter değiştirirken ne yapmak seçimler, veritabanında oyunun URL başlığı saklamak gerekir öneririz. Eğer yerine mantık her zaman geri almak zorunda değildir, çünkü bu, çok daha kolay bir URL tarafından oyun aramak için yapacaktır. Ayrıca (tersinir?) Ikamesi süreci tersine mümkün yapmak zorunda kalmadan güzel bir URL oluşturmak için izin verir.

Yolumdan reversability ile, artık çift çizgi kaldırır, bunu yapabilirsiniz:

$id = str_replace(array(" ", ":"), '_', $_GET['title']);
$doubledUp = strpos($id, "__");
while ($doubledUp !== false) {
    $id = str_replace("__", "_", $id);
    $doubledUp = strpos($id, "__");
}

Bu deneyin ..

$string = "Day of Defeat: Source";
$string = preg_replace("/[^a-zA-Z0-9 ]/", " ", $string); //remove all non-alphanumeric
$string = preg_replace('/\s+/', ' ', $string); //more than one spaces to single space
$string = preg_replace('/\s/', '_', $string); //space to an underscore
echo $string;

Umarım bu yardımcı olur.

Ben uzun zaman önce Kohana çerçevesi için bir işlev URL::title() yazdı.

/**
 * Convert a phrase to a URL-safe title. Note that non-ASCII characters
 * should be transliterated before using this function.
 *
 * @param   string  phrase to convert
 * @param   string  word separator (- or _)
 * @return  string
 */
public static function title($title, $separator = '-')
{
	$separator = ($separator === '-') ? '-' : '_';

	// Remove all characters that are not the separator, a-z, 0-9, or whitespace
	$title = preg_replace('/[^'.$separator.'a-z0-9\s]+/', '', strtolower($title));

	// Replace all separator characters and whitespace by a single separator
	$title = preg_replace('/['.$separator.'\s]+/', $separator, $title);

	// Trim separators from the beginning and end
	return trim($title, $separator);
}

View source at Github