2010-10-11 9 views
15

je un formulaire HTML qu'un utilisateur peut saisir du texte dans un champ title, je puis php créer un fichier HTML appelé title.htmlRetrait simple citation d'une chaîne en php

Mon problème est que les utilisateurs peuvent les espaces d'entrée et apostrophes dans le champ de titre qui ne peut pas être utilisé dans le nom de fichier html. J'ai remplacé les espaces par des traits de soulignement en utilisant:

$FileName = str_replace(" ", "_", $UserInput); 

Cependant, je ne peux pas sembler enlever des guillemets simples? Je l'ai essayé d'utiliser:

$FileName = preg_replace("/'/", '', $UserInput); 

mais cela a pris test's et transformé en test\s.html.

+1

Vous avez des citations magiques activés. Cela cause plus de problèmes qu'elle n'en résout, alors éteignez-les. – staticsan

Répondre

44

Utilisation de votre méthode str_replace actuelle:

$FileName = str_replace("'", "", $UserInput); 

Bien qu'il soit difficile de voir, le premier argument est un guillemet suivi d'un guillemet simple suivi d'un guillemet. Le deuxième argument est deux guillemets doubles avec rien entre les deux.

Avec str_replace, vous pourriez même avoir un tableau de chaînes que vous voulez supprimer entièrement:

$remove[] = "'"; 
$remove[] = '"'; 
$remove[] = "-"; // just as another example 

$FileName = str_replace($remove, "", $UserInput); 
8

Vous pouvez remplacer en HTML entitiy:

$FileName = preg_replace("/'/", "\'", $UserInput); 
2

Vous pouvez également être plus restrictive pour éliminer caractères interdits. La regex suivante supprimerait tous les caractères qui ne sont pas des lettres, des chiffres ou traits de soulignement:

$FileName = preg_replace('/[^\w]/', '', $UserInput); 

Vous pouvez le faire pour assurer une compatibilité maximale pour les noms de fichiers entre les différents systèmes d'exploitation.

0
$replace_str = array('"', "'", ","); 
$FileName = str_replace($replace_str, "", $UserInput); 
+1

Bien que cet extrait de code puisse résoudre la question, [y compris une explication] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) aide vraiment à améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, ceci réduit la lisibilité du code et des explications! –

0
$test = "{'employees':[{'firstName':'John', 'lastName':'Doe'},{'firstName':'John', 'lastName':'Doe'}]}" ; 
$test = str_replace("'", '"', $test); 
echo $test; 
$jtest = json_decode($test,true); 
var_dump($jtest); 
0

Essayez celui-ci. Vous pouvez enlever tout ' et " avec:

$FileName = str_replace(array('\'', '"'), '', $UserInput);