2009-11-20 9 views
6

Jak mogę umożliwić użytkownikom korzystanie z „"”(podwójny cudzysłów) wewnątrz pola tekstowego ...Użycie podwójnych cudzysłowów w wartości 'input type = "text"' nie będzie działać, string zatrzyma się przy podwójnym cudzysłowie!

Ilekroć zrobić użyć cudzysłów w polu (wartość), a następnie po otrzymaniu w zmiennej mój plik PHP z:

$text=mysql_real_escape_string($_POST['subject']); 

a następnie powtórzyć je, mam ciąg znaków, który jest właściwie uciekł, ale łańcuch zatrzymuje się dokładnie przed cudzysłów

nie chcę go zatrzymać ze względu na! podwójnie cytować!

JavaScript jest używany do sprawdzania poprawności pola tekstowego, więc nie jest pusty, może powinienem zrobić coś więcej przy pomocy javascript podczas sprawdzania i modyfikowania wartości, aby php mógł uzyskać poprawną wartość, w tym podwójne cudzysłowy?

Dzięki

UPDATE

KOD:

$headline= mysql_real_escape_string($_POST['headline']); 
    echo htmlentities($headline); 

Próbowałem połączenia dwóch wyżej, tylko dadzą takie same wyniki. UWAGA: Próbowałem również dodanie ENT_QUOTES do funkcji htmlentities ...

niesformatowany ciąg wpisanej:

+ , . ; : - _ space & % ! ? = # * ½ @/\ [ ]< > " ' hej hej 

wyjście to będzie kiedy powtarzając go:

+ , . ; : - _ space & % ! ? = # * ½ @/\\ [ ]< > 
+0

Proszę nie używać JavaScript do tego. Nie zrobiłoby to nic, czego nie powinieneś robić po stronie serwera. –

Odpowiedz

20

Musisz użyć htmlspecialchars($str, ENT_QUOTES) lub htmlentities($str, ENT_QUOTES) do konwersji cudzysłowów do jednostki HTML &quot;. Funkcja ta zajmuje się również innymi znakami, które powinny być zakodowane.

mysql_real_escape_string() służy wyłącznie do unikania pojedynczych cudzysłowów w zapytaniach do bazy danych, dzięki czemu można poprawnie wprowadzać ciągi znaków z pojedynczymi cudzysłowami do bazy danych (i unikać iniekcji SQL).

EDYCJA: Dodano parametry. Dzięki micahwittman

+0

Nie wyświetli podwójnego cudzysłowu, wyświetla tylko ukośniki odwrotne ... Przeczytaj moją aktualizację plz –

+0

Musisz użyć opcjonalnego drugiego parametru dla takich htmlentities: echo htmlentities ($ headline, ENT_QUOTES); która będzie również kodować podwójne i pojedyncze cudzysłowy (zobacz inne specjalne stałe oprócz ENT_QUOTES na http://php.net/manual/en/function.htmlentities.php). Ponadto, powinieneś używać nie tylko sql_real_escape_string() do przygotowania do przechowywania ciągu znaków w bazie danych mysql - dlatego \ staje się \\. – micahwittman

1

Nie należy do JS modyfikować ciąg wejściowy, serwer powinien upewnić się, że może zaakceptować to, co otrzyma niezależnie.

Możesz uniknąć podwójnych cudzysłowów z inną wartością: symbolem Assci lub kodem HTML &quot; itd. Przed przekazaniem go do funkcji ucieczki mysql?

3

Powodem, dla którego nie działa, gdy wyprowadzasz go do input, jest to, że value jest obcięty w momencie wyceny. Będziesz musiał użyć htmlspecialchars() na wyjściu.

2

Miksujesz dwie rzeczy: mysql_real_escape_string służy do przygotowania ciągów do przechowywania w bazie danych mysql. htmlentities służy do przygotowania ciągów do echowania w przeglądarce. Oba są ważne, ale nie można oczekiwać, że wywołanie jednego po drugim na tym samym łańcuchu będzie działało.Zrób coś takiego:

// Copy string after escaping for mysql into $db_headline 
$db_headline= mysql_real_escape_string($_POST['headline']); 

// Copy string after escaping for page display into $html_headline 
$html_headline = htmlentities($_POST['headline']); 

// Store the headline in the database 

... 

?> 
<input type="text" name="headline" value="<?php echo $html_headline ?>" /> 

... 
Powiązane problemy