2009-12-02 11 views
10

Gibt es eine PHP-String-Funktion, um eine Zeichenfolge nach einem bestimmten Zeichen zu trimmen. Ich habe auf der php.net-Seite nachgesehen und eine Google-Suche durchgeführt, konnte aber nichts finden. Die einzige Lösung, an die ich denken konnte, war explodieren und dann den ersten Teil des Arrays zu greifen, aber das ist nicht die eleganteste Lösung.PHP-Trim-String bei einem bestimmten Zeichen

Zum Beispiel

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

jemand eines guten Spickzettels kennt für Funktionen PHP-String-Manipulation? Dank

+0

Vielleicht finden Sie [ 's ($ str) -> before ('?')'] (Https://github.com /delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L389) oder ['s ($ str) -> beforeLast ('?')'] (https://github.com/delight- im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php # L399) hilfreich, wie in [dieser eigenständigen Bibliothek] (https://github.com/delight-im/PHP-Str) gefunden. – caw

Antwort

21

könnten Sie explode verwenden:

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

+1 am wenigsten kompliziert – seanmonstar

+0

Nützlich, weil jetzt habe ich die Abfrage in einer Variablen stechen, so dass ich es später verwenden kann, wenn ich muss. Ich bin dabei, meinen Code zu minimieren. – andrew

+0

+1 - Kleiner als mein Code. –

23

Vielleicht so etwas wie folgt aus:

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

Beachten Sie, dass dies nicht sehr robust ist (das heißt keine Fehlerprüfung, usw.), aber es könnte Ihnen helfen, Ihr Problem zu lösen.

+0

Lustig, ich habe gerade die gleiche Lösung gefunden, es scheint eine Menge verschiedener Möglichkeiten zu geben, dieses einfache Problem anzugehen – andrew

+0

Nicht überraschend, dass PHP lose von Perl abgeleitet wurde;) http://en.wikipedia.org/wiki/ Dort% 27s_more_than_one_way_to_do_it – jheddings

+0

Aber das scheitert, wenn '?' wird nicht in der Zeichenkette gefunden, d. h. es wird eine leere Zeichenkette ergeben. –

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

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

Eine ausgezeichnete, offizielle Liste der String-Manipulation Funktionen here zur Verfügung steht.

4

Die Funktionen strstr und stristr finden das erste Vorkommen in einer Zeichenkette und geben alles zurück (einschließlich der Suchzeichenfolge). Aber Sie liefern true als drittes Argument, es bringt alles vor dem Suchstring zurück.

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

Wenn die Übereinstimmung nicht gefunden wird es wieder FALSE so könnten Sie eine Fehlerprüfung wie folgt schreiben:

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

Seien Sie vorsichtig mit 'stristr':" Gibt den übereinstimmenden Teilstring zurück. Wenn nadel nicht gefunden wird, gibt 'FALSE' zurück." –

+0

Sie brauchen nicht "stristr". 'strstr' wird ausreichen. – Gumbo

+0

Dank @Dominic und @Gumbo. Meine Antwort wurde aktualisiert, um beide Kommentare wiederzugeben. –

9

Versuchen strtok:

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

Beachten Sie, dass der zweite Parameter a Liste der Trennzeichen und keine Trennzeichenfolge.

+1

gehen c stdlib string.h! – warren

0

Dies ist möglicherweise zu viel für das, was Sie versuchen zu tun, aber wenn Sie eine URL in Stücke zerlegen möchten, versuchen Sie die PHP-Funktion parse_url. Hier ist die PHP manual page.

Sie möchten dann den "Pfad" Teil des resultierenden Arrays.

1

Obwohl reine String-Funktionen eine bessere Leistung bieten können, ist dies nicht nur eine Zeichenfolge; es ist ein URI. Daher ist es sinnvoller, eine Funktion zu verwenden, die solche Daten zu handhaben gemacht hat:

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