2010-10-11 12 views
15

Ich habe ein HTML-Formular entfernen, dass ein Benutzer eingegebenen Text in ein Feld title kann, ich habe php dann eine HTML-Datei title.htmlSingle-Zitat aus einem String in PHP

Mein Problem ist, dass die Benutzer eingeben können Räume genannt zu schaffen und Apostroph in das Titelfeld, das nicht im HTML-Dateinamen verwendet werden kann. Ich ersetzte die Räume mit Unterstrichen durch den Einsatz:

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

Aber ich kann nicht scheinen, einfache Anführungszeichen zu entfernen? Ich habe versucht mit:

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

aber das nahm test's und verwandelte sie in test\s.html.

+1

Sie haben Magic Quotes eingeschaltet. Dies verursacht mehr Probleme als es löst, also schalte sie aus. – staticsan

Antwort

44

mit Ihrer aktuellen str_replace Methode:

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

Während es schwer zu sehen ist, das erste Argument ist ein doppeltes Anführungszeichen durch ein einzelnes Zitat von einem doppelten Anführungszeichen gefolgt gefolgt. Das zweite Argument sind zwei doppelte Anführungszeichen mit nichts dazwischen.

Mit str_replace, könnten Sie sogar ein Array von Strings haben Sie ganz entfernen möchten:

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

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

Sie können in HTML Rechtsträger ersetzen:

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

Sie auch restriktiver bei der Beseitigung sein könnte unzulässige Zeichen Die folgende Regex würde alle Zeichen entfernen, die nicht Buchstaben, Ziffern oder unterstreicht:

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

Sie könnten dies tun wollen für Dateinamen in den verschiedenen Betriebssystemen maximale Kompatibilität zu gewährleisten.

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

Während dieses Code-Snippet die Frage lösen kann, hilft [einschließlich einer Erklärung] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch nicht, Ihren Code mit erklärenden Kommentaren zu füllen, dies reduziert die Lesbarkeit sowohl des Codes als auch der Erklärungen! –

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

versuchen diese. Sie können nur ' und " mit Streifen:

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