Php 拉雷维尔。替换url中的%20
我有一个简单的问题,我必须从URL中替换%20和其他垃圾。目前看起来是这样的Php 拉雷维尔。替换url中的%20,php,laravel,url,Php,Laravel,Url,我有一个简单的问题,我必须从URL中替换%20和其他垃圾。目前看起来是这样的http://exmaple/profile/about/Eddies%20Plumbing。正如你所看到的,它的个人资料链接 是的,我可以在每个超链接之前添加str\u replace值,但我有10个,我认为这是一种不好的做法。也许有更好的解决办法?您会使用什么解决方案?谢谢 链接是URL编码的。使用urldecode($profileLink)对其进行解码。这不是废话,这是空格字符的有效unicode表示形式。它被编
http://exmaple/profile/about/Eddies%20Plumbing
。正如你所看到的,它的个人资料链接
是的,我可以在每个超链接之前添加
str\u replace
值,但我有10个,我认为这是一种不好的做法。也许有更好的解决办法?您会使用什么解决方案?谢谢 链接是URL编码的。使用urldecode($profileLink)编码>对其进行解码。这不是废话,这是空格字符的有效unicode表示形式。它被编码是因为它是被认为不安全的字符之一:
所有不安全字符必须始终在URL中编码。对于
例如,字符“#”
必须在URL中编码,即使在
通常不处理碎片或锚的系统
标识符,因此如果URL被复制到另一个系统中
如果不使用它们,则无需更改URL编码
因此,为了拥有漂亮的URL,您应该避免使用保留字符和不安全字符,这些字符需要编码才能作为URL的一部分有效:
保留字符:$&+,/:;=@代码>
不安全字符:空白/空白和<>
相反,将空格替换为破折号,破折号在视觉上起到相同的作用,同时也是一个安全字符,例如,请查看堆栈溢出URL以了解此问题。下面的URL看起来很好,可读性好,没有空格:
http://exmaple/profile/about/eddies-plumbing
您可以使用Laravel的str_slug
helper函数为您的客户完成艰苦的工作:
str_slug('Eddies Plumbing', '-'); // returns eddies-plumbing
除了用破折号替换空格外,它还用一个破折号替换多个空格,并去除所有非字母数字字符,因此没有可靠的解码方法
尽管如此,我一开始不会使用这种方法。我通常使用两种主要方法来标识数据库条目:
1。通过ID
在您的情况下,路由路径定义如下所示:
/profiles/about/{id}/{slug?} // real path "/profiles/about/1/eddies-plumbing"
/profiles/about/{slug} // real path "/profiles/about/eddies-plumbing"
用于标识用户的代码如下所示user::find($id)
(不需要slug
参数,它只是为了使URL更可读,这就是为什么我使用?
使其成为可选的)
2。通过一个slug
在您的情况下,路由路径定义如下所示:
/profiles/about/{id}/{slug?} // real path "/profiles/about/1/eddies-plumbing"
/profiles/about/{slug} // real path "/profiles/about/eddies-plumbing"
在这种情况下,我总是将slug作为列存储在users
表中,因为它是与该用户相关的属性。因此检索过程非常简单User::where('slug',$slug)
。当然,在将用户保存到数据库时,使用stru slug
生成有效的slug。我通常更喜欢这种方法,因为它还有一个额外的好处,即允许slug成为您想要的任何东西(实际上不需要从用户名生成)。这还允许用户选择自定义URL,并有助于搜索引擎优化。我正在解析通过这种方式获得的URL->
$replacingTitle = str_replace('-',' ',$title);
<a href="example.com/category/{{ str_slug($article->title) }}/" />
$replacingTitle=str_replace('-','.$title);
在您的视图中
<a href="{{url('your-url'.str_slug($comm->title))}}">{{$comm->title}</a>
在我的控制器里解码怎么样?laravel提供了任何静态方法吗?您需要提供更多上下文,说明为什么需要在控制器中解码URL。您是否使用名称部分来标识数据库中的用户?因此,我发送username-Eddies-pipeoping,并且我希望控制器中的值相同,因为我的查询$user=user::where('username','=',$username)->first()代码>。所以我的问题是,现在我得到了替换值。我需要类似的方法,但它应该给我旧的用户名值(str_slug之前)。我希望这是有意义的。我更新了我的答案,以考虑到你的评论。这是我一直在寻找的机会。我将在我的数据库中添加额外的列,以保持其新鲜和现代。谢谢