将 URL 中的空格替换为短划线 (-)


Replace Spaces with Dash (-) in URL

我正在做我的第一个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 这样的 url

现在它只适用于 site.com/marvel/amazing 蜘蛛侠或site.com/marvel/amazing%20spider-man

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

A. 编写在路由过程中将"-"替换为 %20 的代码b. 编写在 URL 生成过程中将 %20 替换为"-">

的代码

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

我认为您没有得到预期结果的原因是因为"系列"名称存储在数据库中的格式,请记住,这是在寻找完全匹配,因此如果您想检索以下结果:

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

您需要将其作为"超凡蜘蛛侠"存储在数据库中,以避免删除破折号(-(的额外步骤,如果您不喜欢这种格式,那么您可以执行以下操作:

$series = str_replace('-', ' ', $series); 
这将删除破折号,

但请注意不要在名称中使用破折号,因为它们将被删除,现在您可以将系列名称存储为"超凡蜘蛛侠"在数据库中。

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

  • str::slug(字符串$title,字符串$separator = '-'(

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

截至 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 的可读性。

这是 Laravel 的解决方案。

use Str;
use Carbon'Carbon;
$start_at = Str::replace('-', '/', '12-28-2021');
Carbon::parse($start_at);