在避免UTF-8错误的同时获取某个字符后的字符串

时间:2015-12-29 07:47:56

标签: php utf-8

我在发布之前完成了我的研究,但找不到答案。如何获取某个字符后的字符串部分?

例如,对于字符串:

gallery/user/profile/img_904.jpg

我想回来:

img_904.jpg

我还关注basename()关于包含亚洲字符的UTF-8文件名的错误。

3 个答案:

答案 0 :(得分:3)

在这种情况下,您可以使用basename() function

php > $path = 'gallery/user/profile/img_904.jpg';
php > echo basename($path);
img_904.jpg

作为一个更一般的例子,例如,如果你想在最后一个|之后获得字符串的一部分,你可以使用这样的方法:

php > $string = 'Field 1|Field 2|Field 3';
php > echo substr(strrchr($string, '|'), 1);
Field 3

甚至:

php > $string = 'Field 1|Field 2|Field 3';
php > echo substr($string, strrpos($string, '|') + 1);
Field 3

修改

您注意到basename()中的UTF-8处理问题,这是我遇到的几个版本的PHP问题。我使用以下代码作为UTF-8路径的解决方法:

/**
 * Returns only the file component of a path. This is needed due to a bug
 * in basename()'s handling of UTF-8.
 *
 * @param string $path Full path to to file.
 * @return string Basename of file.
 */
function getBasename($path)
{
    $parts = explode('/', $path);

    return end($parts);
}

来自PHP basename() documentation

  

注意:   basename()可识别语言环境,因此要使用多字节字符路径查看正确的基本名称,必须使用setlocale()函数设置匹配的语言环境。

答案 1 :(得分:2)

<?php

$path = 'gallery/user/profile/img_904.jpg';
$filename = substr(strrchr($path, "/"), 1);
echo $filename; 


?>

这会对你有帮助..

答案 2 :(得分:0)

$path = gallery/user/profile/img_904.jpg;
$temp = explode('/', $path);
$filename = $temp[count($temp)-1];