首页 > 解决方案 > 删除“?” 仅在 str_replace 的特定子目录中

问题描述

下面的功能是替换 &?字符,但?我希望替换在子目录中有效example.com/forum/

public static function clean($sUrl)
    {
        return str_replace([' ', '&', '?'], ['%20', '&', ''], $sUrl);
    }

例子:

https://example.com/forum/post/work/22/what-are-requirements-to-get-a-work-permit?/24

https://example.com/forum/post/work/22/what-are-requirements-to-get-a-work-permit/24

这是制作论坛网址的代码:

<a href="{{ $design->url('forum', 'forum', 'post', "$topic->name,$topic->forumId,$topic->title,$topic->topicId") }}">

标签: phphtml

解决方案


您需要使用preg_match()forum匹配 URL 字符串以检查 URL 中是否存在子目录。稍后,您可以使用str_replace()从您的 URL中删除。?

<?php 

function removeQuestionMarks($URL){
    if(preg_match('/^http(s)?:\/\/example\.com\/forum\/.*$/',$URL) === 1){
        $URL = trim($URL);
        $URL = str_replace("?","",$URL);
    }

    return str_replace([' ', '&'],['%20', '&amp;'],$URL);
}

echo removeQuestionMarks('https://example.com/forum/post/work/22/what-are-requirements-to-get-a-work-permit?/24'),PHP_EOL;

echo removeQuestionMarks('https://example.com/forum/ why? is it difficult?/877');

演示: https ://3v4l.org/FXDml

请注意,我没有使用urlencode()它,因为它也会转换 URL 中的其他字符,这在您的情况下是不需要的。


推荐阅读