2009-12-02 66 views
10

是否有一个PHP字符串函数用于在特定字符后修整字符串。我看了一下php.net网站,做了一个谷歌搜索,但找不到任何东西。我能想到的唯一解决方案是爆炸,然后抓住阵列的第一部分,但这不是最优雅的解决方案。Php在特定字符处修剪字符串

例如

$string = "/gallery/image?a=b"; 
$string = imaginary_function($string,'?'); 
echo $string; //echoes "/gallery/image" 

有谁知道一个好的小抄PHP的字符串处理函数的? 感谢

+0

您可能会发现['s($ str) - > beforeFirst('?')'](https://github.com /delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L389)或['s($ str) - > beforeLast('?')'](https://github.com/delight- im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L399)很有帮助,在[此独立库](https://github.com/delight-im/PHP-Str)中找到。 – caw

回答

21

你可以使用explode

$string = "/gallery/image?a=b"; 
list($url,$querystring) = explode('?', $string, 2); 
+1

+1最不复杂 – seanmonstar

+0

有用的,因为现在我有查询刺在一个变量,所以我可以稍后使用它,如果我需要。我关于最小化我的代码。 – andrew

+0

+1 - 比我的代码更新。 –

23

也许是这样的:

$string = substr($string, 0, strpos($string, '?')); 

注意,这并不是很稳定(即没有错误检查等),但它可能会帮助您解决问题。

+0

有趣的是,我刚刚提出了相同的解决方案,似乎有很多不同的方法来解决这个简单的问题 – andrew

+0

毫不奇怪,PHP从Perl松散派生;)http://en.wikipedia.org/wiki/ There%27s_more_than_one_way_to_do_it – jheddings

+0

但是,如果'?'会失败在字符串中找不到,即它将导致一个空字符串。 –

2
function imaginary_function($string, $char) { 
    $index = strpos($char, $needle); 
    if ($index === false) { return $string }; 

    return substr($string, 0, $index); 
} 

的字符串处理函数一个优秀的,正式的名单可here

4

strstrstristr函数查找字符串中的第一个匹配项并返回它后面的所有内容(包括搜索字符串)。但它提供了true作为第三个参数,它将搜索字符串前面的所有内容都带回来。

$string = strstr($string, '?', true); # Returns /gallery/image 

如果没有找到匹配它返回FALSE所以你可以写一个错误检查这样的:

if($path = strstr($string, '?', true)){ 
    # Do something 
} 
+1

注意'stristr':“返回匹配的子字符串,如果找不到,返回'FALSE'。” –

+0

你不需要'stristr'。 'strstr'就足够了。 – Gumbo

+0

谢谢@Dominic和@Gumbo。更新我的答案以反映你的评论。 –

9

尝试strtok

$token = strtok($str, '?'); 

注意,第二个参数是分隔符列表,而不是分隔符字符串。

+1

去c stdlib string.h! – warren

0

这对你正在尝试做的事情可能有点过分,但如果你想将URL分解成几块,请尝试使用PHP函数parse_url。这是PHP manual page

然后你会想要结果数组的“路径”部分。

1

虽然纯字符串函数可以提供更好的性能,但这不仅仅是一个字符串;这是一个URI。因此,使用函数来处理这些数据更有意义:

echo parse_url("/gallery/image?a=b", PHP_URL_PATH); 
// Output: /gallery/image