2009-12-02 8 views
10

特定の文字の後に文字列をトリミングするPHP文字列関数はありますか?私はphp.netサイトを見て、Google検索をしましたが、何も見つかりませんでした。私が考えることができる唯一の解決策は、爆発し、配列の最初の部分をつかむが、それは最もエレガントな解決策ではありません。特定の文字の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- [このスタンドアロンライブラリー](https://github.com/delight-im/PHP-Str)にあるように、便利です(im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L399)。 – 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/そこに%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

strstrおよびstristr関数は、文字列内の最初のオカレンスを見つけ、その後ろのすべて(検索文字列を含む)を返します。しかし、それはtrueを3番目の引数として指定すると、検索文字列の前にあるものすべてが返されます。一致が見つからない場合、それはFALSEので、あなたがこのようなエラーチェックを書くことができ返し

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

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

'stristr'には注意してください:"一致した部分文字列を返します。needleが見つからなければ 'FALSE'を返します。" –

+0

'stristr'は必要ありません。 'strstr'で十分です。 – Gumbo

+0

ありがとう@Dominicと@Gumbo。両方のコメントを反映するように私の答えを更新しました。 –

9

strtokをお試しください:

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

注2番目のパラメータがAであることセパレータのリストであり、セパレータの文字列ではありません。

+1

go 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 
関連する問題