希望在 php 中完成我的 url 编码

Posted

技术标签:

【中文标题】希望在 php 中完成我的 url 编码【英文标题】:Looking to finish my url encoding in php 【发布时间】:2014-05-20 15:26:30 【问题描述】:

我有一个从另一个教程中使用的 slug 函数。

 public function createSlug($slug) 
        // Remove anything but letters, numbers, spaces, hypens
        // Remove spaces and duplicate dypens
        // Trim the left and right, removing any left over hypens
        
        $lettersNumbersSpacesHypens = '/[^\-\s\pN\pL]+/u';
        $spacesDuplicateHypens = '/[\-\s]+/';

        $slug = preg_replace($lettersNumbersSpacesHypens, '', mb_strtolower($slug, 'UTF-8'));   
        $slug = preg_replace($spacesDuplicateHypens, '-', $slug);
        $slug = trim($slug, '-');
        
        return $slug;
    

效果很好。我有两个问题。

    它给了我“amp”而不是删除“&”符号。不知道是不是应该这样。

    例如。

原始网址

http://www.mywebsite.com?category_id=1&category_name=hot & dogs 

使用 slug 函数的新网址

http://www.mywebsite.com?category_id=1&category_name=hot-amp-dogs

其次,如何将其解码回原始形式,以便在页面上回显它?与破折号相呼应看起来不正确。

【问题讨论】:

简单的 -amp- 如您在链接中看到的那样。 对于解码使用数据库中的两个字段用于 slug 和原始 url,因此需要从数据库中获取原始数据。所以不需要解码 我明白了。我想我将不得不查找如何做到这一点。感谢您指出。 【参考方案1】:

使用“htmlspecialchars_decode”。见以下修改功能:

function createSlug($slug) 
// Remove anything but letters, numbers, spaces, hypens
// Remove spaces and duplicate dypens
// Trim the left and right, removing any left over hypens
$slug   =   htmlspecialchars_decode($slug);

$lettersNumbersSpacesHypens = '/[^\-\s\pN\pL]+/u';
$spacesDuplicateHypens = '/[\-\s]+/';

$slug = preg_replace($lettersNumbersSpacesHypens, '', mb_strtolower($slug, 'UTF-8'));   
$slug = preg_replace($spacesDuplicateHypens, '-', $slug);
$slug = trim($slug, '-');

return $slug;

解码,同意Rakesh Sharma。使用数据库来管理它。

【讨论】:

以上是关于希望在 php 中完成我的 url 编码的主要内容,如果未能解决你的问题,请参考以下文章

在python和sqlite web应用程序中的url编码

ASP.Net URL 编码

SEO友好的URL - 从blog.php?articleId = 26到blog / $ articleTitle

表单地址邮政编码自动完成 https 请求和 CORS 解决方法

我希望 codeigniter 回显 php 错误而不是 500 内部错误

XCTF-攻防世界CTF平台-Web类——9PHP2(.phps文件url编码)