2009-12-02 9 views
10

¿Hay una función de cadena php para recortar una cadena después de un carácter en particular. Eché un vistazo al sitio php.net e hice una búsqueda en Google pero no pude encontrar nada. La única solución en la que podía pensar era explotar y luego tomar la primera parte de la matriz, pero esa no es la solución más elegante.Cadena de recorte Php en un carácter particular

Por ejemplo

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

¿Alguien sabe de una buena hoja de trucos para las funciones de manipulación de cadenas php? Gracias

+0

Es posible encontrar [ '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) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Str). – caw

Respuesta

21

Usted podría utilizar explode:

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

+1 menos complicado – seanmonstar

+0

Útil, porque ahora tengo la picadura de la consulta en una variable para que pueda usarla más adelante si es necesario. Me refiero a minimizar mi código. – andrew

+0

+1 - Más nítido que mi código. –

23

Tal vez algo como esto:

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

Tenga en cuenta que esto no es muy robusta (es decir, sin la comprobación de errores, etc), pero podría ayudar a resolver su problema.

+0

Es curioso, acabo de presentar la misma solución, parece que hay muchas maneras diferentes de abordar este simple problema – andrew

+0

No es sorprendente que PHP se derivara de manera general de Perl;) http://en.wikipedia.org/wiki/ Hay% 27s_more_than_one_way_to_do_it – jheddings

+0

Pero esto no funcionará si '?' no se encuentra en la cadena, es decir, dará como resultado una cadena vacía. –

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

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

una excelente carta, oficial de funciones de manipulación de cadenas está disponible here.

4

Las funciones strstr y stristr encuentran la primera aparición en una cadena y devuelven todo después de ella (incluida la cadena de búsqueda). Pero si proporciona true como tercer argumento, devuelve todo lo que se encuentra delante de la cadena de búsqueda.

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

Si no se encuentra el partido vuelve FALSE por lo que podría escribir un cheque de error como este:

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

Tenga cuidado con 'stristr':" Devuelve la subcadena coincidente. Si no se encuentra la aguja, devuelve 'FALSE'." –

+0

No necesita 'stristr'. 'strstr' será suficiente. – Gumbo

+0

Gracias @Dominic y @Gumbo. Actualicé mi respuesta para reflejar ambos comentarios. –

9

Trate strtok:

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

Tenga en cuenta que el segundo parámetro es una lista de separadores y no una cadena separadora

+1

ir c stdlib string.h! – warren

0

Esto puede ser excesivo para lo que estás tratando de hacer, pero si quieres separar una URL en pedazos, prueba la función PHP parse_url. Aquí está el PHP manual page.

A continuación, querrá la parte "ruta" de la matriz resultante.

1

Aunque las funciones de cadenas puras pueden dar un mejor rendimiento, esto no es solo una cadena; es un URI. Por lo tanto, tiene más sentido utilizar una función que se hace para manejar tales datos:

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