Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉雷维尔。替换url中的%20_Php_Laravel_Url - Fatal编程技术网

Php 拉雷维尔。替换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表示形式。它被编

我有一个简单的问题,我必须从URL中替换%20和其他垃圾。目前看起来是这样的
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之前)。我希望这是有意义的。我更新了我的答案,以考虑到你的评论。这是我一直在寻找的机会。我将在我的数据库中添加额外的列,以保持其新鲜和现代。谢谢