2015-11-30 24 views
0

我有可能會或可能不會包含某些分隔符,並使用strtok在一個字符串分隔符之後刪除一切,例如字符串列表:如果分隔符是字符串中的第一個字符,php strtok不起作用?

$href = "test#content"; 
$href = strtok($href,'#'); 
echo $href; 

輸出:

test 

但是,當字符串以分隔符開頭時,我遇到了一個問題:

$href = "#content"; 
$href = strtok($href,'#'); 
echo $href; 

而不是所需的輸出「 ,它輸出:

content 

爲何不相同的方式工作作爲第一個例子,什麼是最有效的方式來獲得用最少的額外代碼了預期的效果?

+0

從手冊中可以看出'發現空白部分時的行爲在PHP 4.1.0中發生了變化。舊的行爲返回一個空字符串,而新的,正確的行爲簡單地跳過了字符串的一部分:' – RamRaider

+1

這實際上來自對'strtok()'實際做了什麼的基本誤解,並且假設它是某種變體爆炸(),只是簡單地返回一個結果一次 –

回答

2

在這種情況下,你可以使用strstr(),用於當第三($before_needle)的說法是返回分隔符的左部通過,默認情況下返回正確的網站。要檢查分隔符是否存在,您可以使用preg_match()執行任務,它會執行正則表達式,如果模式爲find或false,則返回true

$href = "test#content"; 

if(preg_match('/#/', $href)){ 
    echo strstr($href, '#', true); //test 
}else{ 
    echo 'delimiter not found'; 
} 
+0

只要字符串包含'#',它就會工作,如果不是,則返回空字符串。由於只有一些字符串包含'#',因此無法使用。 – Acidon

+0

@Acidon,有沒有修復分隔符? – rray

+0

正確,一些字符串包含分隔符並且必須被處理,其他字符串則不應該保留原樣。 – Acidon

0

也許preg_split可能是使用在這種情況下:

$href = "#content"; 
$pieces=preg_split('@#@',$href); 
echo $pieces[0];/* Empty */ 
echo $pieces[1];/*content*/ 
1

如果你想之前「#」返回的一切,那麼你可以使用爆炸。

找到空白部分時的行爲隨PHP 4.1.0更改。舊行爲返回一個空字符串,而新的正確的行爲只是跳過字符串的一部分。

TEST 1https://3v4l.org/4lP5u):

$href = "#content"; 
$href = explode('#', $href); 
echo $href['0']; 

//returns '' 

TEST 2https://3v4l.org/ov9Yl):

$href = "test#content"; 
$href = explode('#', $href); 
echo $href['0']; 

//returns 'test' 

EDIT

WHOOPs我在TEST 2示例中添加了錯誤的鏈接,現在更新了鏈接。

根據您的評論

不幸的是我不能去炸的路線,因爲$ HREF變量稍後將 重複使用,並且不能爲數組。此外,還有一個不正確的輸出 的例子在你的第二個鏈接,因爲它呼應$ HREF [ '1'] 代替HREF $ [0]

你可以:

TEST 3https://3v4l.org/uWPOk):

$href = "test#content"; 
$href = explode('#', $href); 
$href = $href['0']; 
echo $href; 

TEST 4https://3v4l.org/rtIJ0):

此檢查,如果字符串包含#和爆炸它在其他$href保持不變

$href = "test#content"; 

if (strpos($href, '#') !== FALSE){ 
    $href = explode('#', $href); 
    $href = $href['0']; 
    echo $href; 
}else{ 
    echo "$href"; 
} 
+1

不幸的是我不能爆炸路線,因爲'$ href'變量將被重複使用,並且不能是數組。另外,在第二個鏈接的例子中有一個不正確的輸出,因爲它迴應'$ href ['1']'而不是'$ href ['0']'。 – Acidon

+1

@Acidon我不好,我加了錯誤的鏈接。我已經更新並添加了新的**測試**。 –

0

如果你想字符串b安伏#你應該使用周圍explode .A工作,爲你的方法可以是這樣的:

<?php 
$href = "#content"; 
if($href[0]=='#'){//check the first index character 
    $href="''".$href; 
} 
$href = strtok($href,'#'); 
echo $href; 

?> 
相關問題