2015-12-29 95 views
3

我已經完成我的研究發佈之前,但無法找到答案。如何獲得特定字符後的字符串部分?獲取字符串後避免UTF-8錯誤某些字符

例如,對於字符串:

gallery/user/profile/img_904.jpg 

我要回:

img_904.jpg 

我還擔心蟲子與basename()關於UTF-8含亞洲字符的文件名。

+1

http://stackoverflow.com/questions/1418193/how-to-get-file-name-from-full-path-with-php – alextsil

+0

哪個人物?你試過什麼了? – Cristik

+0

'gallery/user/profile/img_904.jpg'是路徑。我想返回'img_904.jpg' – user3284463

回答

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 

編輯

你注意到UTF-8處理問題basename(),這是我與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

是否修復了'basename()'錯誤?處理亞洲人物? – user3284463

+0

啊,不知道我們在處理UTF-8。看我的編輯;我爲該場景添加了一個工作示例。 – Will

2
<?php 

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


?> 

這將幫助你..

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