Jak uciec ampersand w łańcuchu javascript tak, że strona będzie validate strict?
Próbuję przekazać dataString do połączenia ajax przy użyciu JQuery. W wywołaniu konstruuję parametry get, a następnie wysyłam je na stronę php na końcu odbiorczym. Problem polega na tym, że łańcuch danych ma w sobie ampersands, a walidator HTML strict go blokuje.
Oto kod:
$(document).ready(function(){
$("input#email").focus();
$('#login_submit').submit(function(){
var username = $('input#email').val();
var password = $('input#password').val();
var remember = $('input#remember').attr("checked");
var dataString = "email="+username+"&password="+password+"&remember="+remember;
$.post('login.php', dataString, function(data) {
if (data == 'Login Succeeded.') {
location.reload(true);
} else {
$("input#email").focus();
$("#login_msg").html(data).effect("pulsate", {times: 2}, 1000);
}
});
return false;
});
});
I oto przykład komunikatu walidatora: nie można wygenerować identyfikatora systemowego dla ogólnego encji "password".
var dataString = "email="+username+"&password="+password+"&remember="+rememb…
(w walidatorze " p " Po pierwszy ampersand jest oznaczony na Czerwono wskazując punkt awarii).
5 answers
Spróbuj umieścić swój javascript wewnątrz bloku CDATA w taki sposób:
<script type="text/javascript">
<![CDATA[
// content of your Javascript goes here
]]>
</script>
Co powinno sprawić, że przejdzie walidację. Aby być wyjątkowo bezpiecznym, możesz dodać komentarze Javascript wokół tagów CDATA, aby ukryć je przed starszymi przeglądarkami, które nie rozumieją znacznika CDATA:
<script type="text/javascript">
/* <![CDATA[ */
// content of your Javascript goes here
/* ]]> */
</script>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-10 04:10:09
"\u0026" działa!
Uwaga: przed ślepym zawijaniem tekstu w bloki CDATA należy pamiętać, że celem CDATA jest , A nie poprawienie nieprawidłowych znaków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-10 23:00:07
Ja bym spróbował:
var dataString = "email="+username+"&password="+password+"&remember="+remember;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-10 04:07:40
Czasami \u0026
, &
, %26
, &
, lub <![CDATA[ ... ]]>
pracować dla ampersands w blokach skryptów w xhtml.
Chciałbym zapytać, po co nam takie ograniczenie (mruganie na błędy w konstrukcji SGML), które również uniemożliwia  
, mathml
, target
, i nested xml
z pracy.
Dlaczego nie możemy po prostu powiedzieć, że w bloku skryptów żadne znaczniki lub inne rzeczy SGML nie są rozpoznawane? Dlaczego XHTML nie pozwala na działanie celów?
Nie widzę przewagi SGML, która przewyższa wady. W tej chwili, nawet jeśli html5 jest nieco dostępny, XHTML jest walidatorem, który wychwytuje najwięcej błędów programistycznych. Naprawimy xml bez historycznego uwzględnienia jego pochodzenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-27 18:45:11