Chcę wysłać kilka zmiennych i ciąg z POST
metodą z JavaScript.
Pobieram ciąg z bazy danych, a następnie wysyłam go na stronę PHP. Używam XMLHttpRequest
obiektu.
Problem polega na tym, że ciąg zawiera znak &
kilka razy, a $_POST
tablica w PHP widzi go jak wiele kluczy.
Próbowałem zastępując &
ze \&
z replace()
funkcji, ale nie wydaje się do niczego.
Czy ktoś może pomóc?
Kod javascript i ciąg wygląda następująco:
var wysiwyg = dijit.byId("wysiwyg").get("value");
var wysiwyg_clean = wysiwyg.replace('&','\&');
var poststr = "act=save";
poststr+="&titlu="+frm.value.titlu;
poststr+="§iune="+frm.value.sectiune;
poststr+="&wysiwyg="+wysiwyg_clean;
poststr+="&id_text="+frm.value.id_text;
xmlhttp.open("POST","lista_ajax.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(poststr);
Ciąg to:
<span class="style2">"Busola"</span>
javascript
ajax
string
post
xmlhttprequest
candino
źródło
źródło
Możesz chcieć użyć encodeURIComponent () .
encodeURIComponent(""Busola""); // => %26quot%3BBusola%26quot%3B
źródło
Musisz zmienić adres URL na znak ampersand. Posługiwać się:
var wysiwyg_clean = wysiwyg.replace('&', '%26');
Jak wskazuje Wolfram, jest to ładnie obsługiwane (wraz ze wszystkimi innymi znakami specjalnymi) przez encodeURIComponent.
źródło
Odpowiedź Ramila Amra działa tylko dla znaku &. Jeśli masz inne znaki specjalne, powinieneś użyć PHP
htmlspecialchars()
i JSencodeURIComponent()
.Możesz pisać:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
A po stronie serwera:
htmlspecialchars($_POST['wysiwyg']);
Zapewni to, że AJAX przekaże dane zgodnie z oczekiwaniami, a PHP (na wypadek, gdybyś wstawiał dane do bazy danych) upewni się, że dane działają zgodnie z oczekiwaniami.
źródło
Możesz przekazać swoje argumenty za pomocą tej funkcji encodeURIComponent, więc nie musisz się martwić o przekazywanie żadnych znaków specjalnych.
data: "param1=getAccNos¶m2="+encodeURIComponent('Dolce & Gabbana')
LUB
var someValue = 'Dolce & Gabbana'; data: "param1=getAccNos¶m2="+encodeURIComponent(someValue)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
źródło
Możesz zakodować swój ciąg przy użyciu kodowania Base64 po stronie JavaScript, a następnie zdekodować go po stronie serwera za pomocą PHP (?).
JavaScript ( Docu )
var wysiwyg_clean = window.btoa( wysiwyg );
PHP ( Docu ):
var wysiwyg = base64_decode( $_POST['wysiwyg'] );
źródło
Preferowanym sposobem jest użycie biblioteki JavaScript, takiej jak jQuery i ustawienie opcji danych jako obiektu, a następnie pozwól jQuery wykonać kodowanie, na przykład:
$.ajax({ type: "POST", url: "/link.json", data: { value: poststr }, error: function(){ alert('some error occured'); } });
Jeśli nie możesz użyć jQuery (co jest obecnie standardem), użyj encodeURIComponent .
źródło
encodeURIComponent(Your text here);
Spowoduje to obcięcie znaków specjalnych.
źródło