Y a-t-il une fonction de chaîne php pour couper une chaîne après un caractère particulier. J'avais un coup d'œil sur le site php.net et j'ai fait une recherche de Google mais n'a rien trouvé. La seule solution que je puisse penser était exploser puis attrape la première partie de la matrice, mais ce n'est pas la solution la plus élégante.
Par exemple P>
$string = "/gallery/image?a=b"; $string = imaginary_function($string,'?'); echo $string; //echoes "/gallery/image"
7 Réponses :
Peut-être quelque chose comme ceci: Notez que ce n'est pas très robuste (c.-à-d. Pas de vérification des erreurs, etc.), mais cela pourrait vous aider à résoudre votre problème. P> < / p>
Drôle, je viens de trouver la même solution, il semble y avoir de nombreuses façons différentes d'aborder ce problème simple
Pas surprenant que PHP soit dérivé lâchement dérivé de Perl;) en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it
Mais cela échouera si "?" On ne se trouve pas dans la chaîne, c'est-à-dire qu'il aboutira à une chaîne vide.
Pas sûr, mais je devine deux appels de fonction ( substr code> et Stros code>) prenez plus de ressources qu'un seul appel comme strtstr code> ou strutok code>. Bien sûr, si c'est juste exécuté une fois par page charge, qui se soucie :)
Peut essayer uk3.php.net/manual/fr/function.strrpos.php < / a> répétitivement à la place?
@nikc: Ouais, je vous avais prévenu que ce n'était pas très robuste;) @dcneiner: Très vrai ... Je n'ai pas réalisé que le troisième argument avait été ajouté à strtstr code>. C'est probablement un meilleur moyen d'y aller si vous avez 5,3 ou plus sur votre serveur.
Vous pouvez utiliser exploser :
Utile, parce que maintenant, j'ai la piqûre de requête dans une variable afin que je puisse l'utiliser plus tard si j'en ai besoin. Je suis tout sur le minimisation de mon code.
function imaginary_function($string, $char) {
$index = strpos($char, $needle);
if ($index === false) { return $string };
return substr($string, 0, $index);
}
An excellent, official list of string manipulation functions is available here.
Le strstr code> et Stristr code> Les fonctions trouvent la première occurrence dans une chaîne et renvoie tout après elle (y compris la chaîne de recherche). Mais vous fournissez true code> comme troisième argument, il ramène tout devant la chaîne de recherche. if( $path = strstr( $string, '?', true) ){
# Do something
}
Soyez prudent avec stristr code>: "Retourne la sous-chaîne correspondante. Si l'aiguille n'est pas trouvée, renvoie false code>".
Vous n'avez pas besoin stristr code>. strtstr code> suffira.
Merci@dominic et @gumbo. Mise à jour de ma réponse pour refléter vos deux commentaires.
try note que le deuxième paramètre est une liste de séparateurs et non une chaîne de séparateur. P> p> strutok code> :
Bien que des fonctions de chaîne pure puissent donner une meilleure performance, ce n'est pas simplement une chaîne; C'est une URI. Par conséquent, il est plus logique d'utiliser une fonction faite pour gérer ces données:
Vous pourriez trouver Cette bibliothèque autonome .
S ($ str ) -> AvantFirst ('?') Code>ous ($ str) -> beforelast ('?') code>utile, comme trouvé dans