2009-12-02 17 views
10

Esiste una funzione di stringa php per tagliare una stringa dopo un determinato carattere. Ho dato un'occhiata al sito php.net e ho fatto una ricerca su google ma non ho trovato nulla. L'unica soluzione che potevo immaginare era esplodere e poi prendere la prima parte dell'array ma non è la soluzione più elegante.Stringa di trim php su un particolare carattere

Per esempio

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

qualcuno sa di una buona cheat sheet per le funzioni di manipolazione di stringhe php? Grazie

+0

si potrebbe trovare [ 's ($ str) -> beforeFirst ('?')'] (Https://github.com /delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L389) o ['s ($ str) -> beforeLast ('?')'] (https://github.com/delight- im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php # L399) utile, come trovato in [questa libreria standalone] (https://github.com/delight-im/PHP-Str). – caw

risposta

21

Potreste usare explode:

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

+1 meno complicato – seanmonstar

+0

Utile, perché ora ho la query pungola in una variabile così posso usarla più tardi se ne ho bisogno. Sto solo riducendo al minimo il mio codice. – andrew

+0

+1 - Più ordinato del mio codice. –

23

Forse qualcosa di simile:

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

Nota che questo non è molto robusto (cioè senza controllo degli errori, ecc), ma potrebbe aiutare a risolvere il problema.

+0

Divertente, ho appena trovato la stessa soluzione, sembra che ci siano molti modi diversi per affrontare questo semplice problema – andrew

+0

Non sorprende che PHP sia stato liberamente derivato da Perl;) http://en.wikipedia.org/wiki/ C'è% 27s_more_than_one_way_to_do_it – jheddings

+0

Ma questo fallirà se '?' non si trova nella stringa, cioè si tradurrà in una stringa vuota. –

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

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

Un eccellente, la lista ufficiale di funzioni di manipolazione di stringhe è disponibile here.

4

Le funzioni strstr e stristr trovano la prima occorrenza in una stringa e restituiscono tutto dopo di essa (compresa la stringa di ricerca). Ma si fornisce true come terzo argomento, si riporta tutto davanti alla stringa di ricerca.

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

Se la partita non viene trovato restituisce FALSE così si potrebbe scrivere un controllo di errore come questo:

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

Attenzione con 'stristr':" Restituisce la sottostringa corrispondente, se l'ago non viene trovato, restituisce 'FALSE'. " –

+0

Non è necessario 'stristr'. 'strstr' sarà sufficiente. – Gumbo

+0

Grazie a @Dominic e @Gumbo. Aggiornato la mia risposta per riflettere entrambi i tuoi commenti. –

9

Prova strtok:

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

Nota che il secondo parametro è un elenco di separatori e non una stringa di separazione.

+1

go c stdlib string.h! – warren

0

Questo può essere eccessivo per ciò che si sta tentando di fare, ma se si desidera rompere un URL in pezzi, provare la funzione PHP parse_url. Ecco lo PHP manual page.

Si desidera quindi la porzione "percorso" della matrice risultante.

1

Sebbene le funzioni di stringa pura possano offrire prestazioni migliori, questa non è solo una stringa; è un URI. Quindi ha più senso usare una funzione che è fatto per gestire tali dati:

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