【问题标题】:Remove last character in a path string if it is a slash如果路径字符串是斜杠,则删除路径字符串中的最后一个字符
【发布时间】:2010-12-13 08:58:52
【问题描述】:

我正在用 PHP 进行一些 url 重写,需要找到末尾带有斜杠的 URL,然后执行 301 重定向。我以为会有一个简单的 PHP 函数来查找最后一个字符串,但我找不到任何东西。第一直觉让我认为我需要使用正则表达式,但我不是 100%。

这是一个例子:

http://domainx.com/characters/我想找一个尾部斜杠,把它变成http://domainx.com/characters

那么什么函数可以帮助我检查最后一个字符是否为“/”?

【问题讨论】:

标签: php regex string url-rewriting character


【解决方案1】:

安全删除最后一个/ 的一个很好的解决方案是使用

$string = rtrim($string, '/');

rtrim() 删除字符串右侧的所有/s,当有一个或多个时。

您还可以安全地在 URL 末尾添加一个 /

$string = rtrim($string, '/').'/';

【讨论】:

    【解决方案2】:

    你可以使用substr:

    substr($str, -1)
    

    这将返回单字节字符串中的最后一个字节/字符。另请参阅多字节字符串变体mb_substr

    但如果您只想删除任何尾部斜杠,rtrim 可能是最好的解决方案。

    由于您使用的是 URL,您还可以查看 parse_url 来解析 URL,因为尾部斜杠不需要是 URL 路径的一部分。

    【讨论】:

    • +1 你得到了我的支持 - 你实际上回答了标题中的问题。
    【解决方案3】:

    $string[strlen($string)-1] 给你最后一个字符。

    但如果你想去掉尾部斜杠,你可以使用$string = rtrim($string, '/');。如果没有尾部斜杠,$string 将保持不变。

    【讨论】:

    • substr($string,-1) 很好:)
    【解决方案4】:

    你可以使用basename()

    这将为http://domainx.com/characters/http://domainx.com/characters 返回characters

    你可以这样做:-

    $page = $_SERVER['REQUEST_URI'];
    $module = basename($page);
    

    然后您可以直接在条件逻辑中使用$module,而无需进行任何重定向。

    如果你想收集最后一个/ 修剪后的 URL,那么你可以这样做:-

    如果您将项目基本 url 存储在配置文件中:-

    BASE_URL  = 'http://example.com'
    

    那么你可以这样做:-

    $page = $_SERVER['REQUEST_URI'];
    $module = basename($page);
    $trimmedUrl = BASE_URL.'/'.$module;
    

    【讨论】:

      【解决方案5】:

      如果你有 php > 7.1

      $string[-1]
      

      会给你最后一个字符

      http://sandbox.onlinephpfunctions.com/code/ff439889f14906749e4eb6328796c354c60f269b

      【讨论】:

        【解决方案6】:

        你可以在主题末尾preg_replace()/

        $url = 'http://domainx.com/characters/';
        $url = preg_replace('/(?:\/)$/', '', $url);
        

        【讨论】:

          【解决方案7】:

          使用 PHP 8

          str_ends_with($string, '/');
          

          新的str_starts_with()str_ends_with() 函数已添加到核心中。

          【讨论】:

            猜你喜欢
            • 2015-01-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-21
            • 1970-01-01
            • 2016-11-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多