2011-09-25 3 views
2

Je ne parviens pas à détecter une apostrophe (') dans une chaîne. J'ai essayéComment trouver une apostrophe dans une chaîne en utilisant PHP?

if (strpos($username, chr(39)) > 0) 
if (strpos($username, '\') > 0) 
if (strpos($username, "'") !== FALSE)) 

sans chance. Quelle est la bonne façon de le faire?

+0

Veuillez fournir un cas de test simple. Une de vos solutions devrait déjà fonctionner. Êtes-vous absolument sûr que c'est une apostrophe? Il y a d'autres personnages qui ressemblent à des apostrophes. –

+0

Puis-je vous demander pourquoi vous cherchez '' 'dans le nom d'utilisateur? –

+0

Je ne veux pas autoriser 'dans les noms d'utilisateur - Drupal le permet par défaut. Pas bon quand vous voulez passer des noms d'utilisateur dans les URL ou créer des noms de fichiers ou des répertoires qui utilisent des noms d'utilisateur – MotoTribe

Répondre

4

Le guillemet simple est un caractère spécial. Donc, si vous voulez utiliser un guillemet simple dans le single quoted string vous devez échapper le guillemet simple avec un symbole \ backslash.

int singleQuotePosition = strpos($username, '\''); 

OU

int singleQuotePosition = strpos($username, "'"); 

PHP Manual: Strings

+0

bahh .. non. chaîne entre guillemets simples signifie que la chaîne est entre guillemets simples. *soupir*. –

+0

@yi_H: oui il est déroutant dans la portée de la question actuelle, je vais modifier le titre du lien que j'ai fourni essentiellement pour faire référence à des guillemets simples et doubles – sll

+0

mais cette réponse est mort ** faux **, l'OP a posté un solution de travail. –

4

Vous avez énuméré celui-ci, et il devrait fonctionner:

if (strpos($username, "'") !== FALSE) 
2

Encore une estimation aléatoire: Peut-être votre seule citation est pas vraiment une seule citation

Si oui, vous pourriez vouloir essayer mb_strpos ou preg_match pour trouver les UTF-8 variations de ce caractère:

preg_match("/'/u", $string); 

Ou même test avec /\p{Pi}/u pour voir si elle est un autre type de Doppelganger guillemet simple.


Une autre astuce: au lieu de strpos et tripoter booléen résultat, essayez strstr si vous voulez juste tester une présence de caractères.

Questions connexes