在URL中用空格( - )替换空格

时间:2013-09-29 16:11:30

标签: php laravel laravel-4 eloquent

我正在开发我的第一个Laravel 4项目并使用雄辩的ORM使用路径从数据库中检索行。例如:

这是一条路线:

Route::get('{publisher}/{series}', function($publisher, $series)
{
$result = Comic::where('publisher', '=', $publisher)
->where('series', '=', $series)
->orderBy('issue', 'asc')
->get();

return View::make('comic')
->with('result', $result); 
});

这应该匹配像site.com/marvel/amazing-spider-man

这样的网址

现在它只适用于site.com/marvel/amazing spider-man 要么 site.com/marvel/amazing%20spider-man

如何确保只使用' - '网址?我相信我需要做的是:

一个。编写代码,在路由期间用%20替换' - ' 湾在网址生成期间编写用%替换%20的代码

另一个考虑因素是我真的不希望我的内容可以在两个网址上访问。

3 个答案:

答案 0 :(得分:2)

我认为你没有得到你期望的结果的原因是因为“系列”名称存储在数据库中的格式,记住是在寻找完全匹配,所以如果你想要检索结果:

http://www.site.com/marvel/amazing-spider-man

你需要将它作为“惊人的蜘蛛侠”存储在数据库中,以避免删除破折号( - )的额外步骤,如果你不喜欢这种格式,那么你可以这样做:

$series = str_replace('-', ' ', $series); 

这将删除短划线,但要注意不要在名称中使用短划线,因为它们会被删除,现在您可以将系列名称作为“惊人的蜘蛛侠”存储在数据库中。

答案 1 :(得分:2)

- > with(' result',Str :: slug($ result));

  • Str :: slug(string $ title,string $ separator =' - ')

http://laravel.com/docs/4.2/helpers#strings

答案 2 :(得分:0)

截至 2021 年这是针对此类问题的第一个 Google 搜索结果,有些人可能会欣赏我对此案例的解决方案,因为这在今天仍然适用。

我使用公共 *.csv 文件在我的数据库中保存国家和城市。因此,有些条目带有破折号和空格,就像 OP 的问题一样。

此外,就像 OP 在他的评论中提到的那样,他必须重命名他的所有数据库条目。

因此我对这个问题有一个很好的解决方案:

  1. 确保您的所有链接都带有下划线而不是空格以提高可读性(还可以提高 SEO),例如:

$slug = str_replace(' ', '_', $this->country); // "United%20States" will be "United_States"

  1. 打开您的 MySQL 控制台并使用以下命令用下划线替换每个空格

UPDATE locations SET country = replace(country, ' ', '_');

这样,带有连字符 (-) 的条目仍将保留在您的数据库中,并且所有其他带有空格的条目都将带有下划线以完全匹配。您还改进了 SEO 和 URL 可读性。