【问题标题】:php str_replace patternphp str_replace 模式
【发布时间】:2010-05-06 18:53:20
【问题描述】:

我有一个 php 应用程序,它将图片保存在服务器上,并将图片名称存储在数据库中。我遇到的问题是图片名称包括保存它的路径/文件夹(例如 1220368812/chpk2198933_large-2.jpg)所以我需要一个 str_replace 模式来删除“1220368812/”并将图片名称正确存储在分贝。 另外,如果您能向我发送一个很好的链接,说明 str_replace 模式是如何工作的,或者至少是您使用的模式如何工作,我将不胜感激。

【问题讨论】:

    标签: php str-replace


    【解决方案1】:

    试试

    • basename — 返回路径的文件名组件

    示例 #1 basename() 示例

    $path = "/home/httpd/html/index.php";
    $file = basename($path);         // $file is set to "index.php"
    $file = basename($path, ".php"); // $file is set to "index"
    

    不需要str_replace 任何东西,因为basename 将删除路径部分。此外,str_replace 不允许 模式。它所做的只是用替换字符串替换所有出现的搜索字符串patterns 的替换是用Regular Expressions 完成的,但这里也不需要它们。

    【讨论】:

    • 你现在肯定已经习惯了"drive-by-down-voters"吗? :)
    【解决方案2】:

    实际上 pathinfo 稍微好一点。它为您提供基本名称等:

    http://php.net/manual/en/function.pathinfo.php

    <?php
    $path_parts = pathinfo('/www/htdocs/index.html');
    
    echo $path_parts['dirname'], "\n";
    echo $path_parts['basename'], "\n";
    echo $path_parts['extension'], "\n";
    echo $path_parts['filename'], "\n"; // since PHP 5.2.0
    ?>
    

    上面的例子会输出:

    /www/htdocs
    index.html
    html
    index
    

    【讨论】:

    • 如果 user331071 需要获取比基本名称更多的信息(OP 中未提及的内容),那么 pathinfo 可能会更好(在这种情况下到底什么是“更好”?)。但是,为了只检索文件的基本名称,我会采纳 Gordon 的建议:只有一行代码可以很清楚地知道它的作用。您的建议需要一行额外的代码并使用数组查找(IMO 的表现力要差得多)。
    • 使用 basename() 您只能获得基本名称而没有扩展数据。根据 OP 的要求,通过使用 basename() 函数来提取文件名,您将获得扩展的解决方法。 pathinfo() 也会给你。这是 1 站购物。 basename() 不是。
    • @Bart K. 当然也可以使用pathinfo 单线:pathinfo($path, PATHINFO_BASENAME)
    • @salathe,不知道,感谢您提供的信息(我对 PHP 知之甚少……)。但是,在basename($path)pathinfo($path, PATHINFO_BASENAME) 之间进行选择,我还是会选择第一个。
    猜你喜欢
    • 2010-10-03
    • 2016-03-14
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多