网址替换

时间:2009-07-05 02:24:08

标签: php sql

我正在尝试制作一些不错的网址。

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.');

需要一些替换字符的帮助。

让我说我的一个游戏的标题是 Day of Defeat: Source 我想用它来访问它: Day_of_Defeat_Source 。我该怎么办?删除冒号, - 和&而那一切都没有。现在: Day_of_Defeat:_Source

但如果我用_替换:它将如下所示: Day_of_Defeat__Source

我该如何解决这个问题?

对不起我的廉价英语,也许和主持人可以让这更加难以理解。

7 个答案:

答案 0 :(得分:1)

所以用':'替换'',空字符串 - 谁说你必须在那里放另一个下划线?

答案 1 :(得分:0)

$bad = array('&', ':', '-'); //array of characters to remove
$id = str_replace($bad, '', $_GET['title'];
$id = str_replace('_', ' ', $id);
...continue with query...

答案 2 :(得分:0)

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

$ search中的每个值都将在$ addr中搜索,如果找到它的情况将替换为$ replace中的相应值。

因此,在这种情况下,您将“”替换为“_”,并将“:”替换为“”,因此您将获得Day_of_Defeat_Source

您可以将任何字符添加到数组$ search和$ replace。

答案 3 :(得分:0)

你可以URL-encode,然后使用URL-decode阅读。

“失败之日:来源”将是“Day%20of%20Defeat%3A%20Source”。

答案 4 :(得分:0)

我建议无论你在替换字符时做出什么选择,都应该将游戏的URL标题存储在数据库中。这将使您通过URL查找游戏变得更加容易,因为您不必每次都撤消替换逻辑。它还允许您创建一个漂亮的URL,而无需使替换过程可逆转(可逆?)。

在可逆性的情况下,您现在可以执行此操作,从而删除双下划线:

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

答案 5 :(得分:0)

试试这个..

$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;

希望这有帮助。

答案 6 :(得分:0)

很久以前,我为Kohana框架编写了一个函数URL::title()

/**
 * 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