2010-10-11 12 views
15

Mam formularza HTML, które użytkownik może wprowadzić tekst w polu title, Mam następnie php Tworzenie pliku HTML o nazwie title.htmlUsuwanie apostrofu z ciągiem w php

Moim problemem jest to, że użytkownicy mogą przestrzenie wejściowe i apostrofy w polu tytułu, których nie można użyć w nazwie pliku HTML. Wymieniłem przestrzenie podkreślenia za pomocą:

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

Jednak nie wydaje się usunąć apostrofy? Próbowałem, używając:

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

ale to trwało test's i przekształcił go w test\s.html.

+1

masz magiczne cytaty włączony. To powoduje więcej problemów niż rozwiązuje, więc je wyłącz. – staticsan

Odpowiedz

44

Korzystanie aktualnej metody str_replace:

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

Choć trudno zobaczyć, pierwszy argument jest cudzysłów następnie jednym cytatem następnie podwójny cudzysłów. Drugi argument to dwa podwójne cudzysłowy, w których nie ma nic pośredniego.

Z str_replace, można nawet mieć tablicę ciągów chcesz usunąć całkowicie:

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

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

można zastąpić w entitiy HTML:

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

Można także być bardziej restrykcyjne w usuwaniu niedozwolone postacie. Poniższy regex byłoby usunąć wszystkie znaki, które nie są litery, cyfry i podkreślenia:

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

Możesz chcieć to zrobić, aby zapewnić maksymalną zgodność nazw plików w różnych systemach operacyjnych.

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

Ten fragment kodu może rozwiązać pytanie, [w tym wyjaśnienie] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-ans -answers) naprawdę pomaga poprawić jakość twojego posta. Pamiętaj, że odpowiadasz na pytanie przeznaczone dla czytelników w przyszłości, a te osoby mogą nie znać powodów sugestii dotyczących kodu. Proszę również starać się nie tłumić kodu za pomocą komentarzy wyjaśniających, co zmniejsza czytelność zarówno kodu, jak i objaśnień! –

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

Spróbuj tego. Można rozebrać tylko ' i " z:

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