Як я можу надіслати символ “&” (амперсанд) через AJAX?


89

Я хочу надіслати кілька змінних та рядок із POSTметодом з JavaScript.

Я отримую рядок з бази даних, а потім надсилаю його на PHP-сторінку. Я використовую XMLHttpRequestоб’єкт.

Проблема полягає в тому, що рядок містить символ &кілька разів, і $_POSTмасив у PHP сприймає його як кілька ключів.

Я намагався заміни &з \&з replace()функцією, але це , здається, не робити нічого.

Хто-небудь може допомогти?

Код і рядок javascript виглядає так:

var wysiwyg = dijit.byId("wysiwyg").get("value");
var wysiwyg_clean = wysiwyg.replace('&','\&');

var poststr = "act=save";

poststr+="&titlu="+frm.value.titlu;
poststr+="&sectiune="+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);

Рядок:

 <span class="style2">&quot;Busola&quot;</span>

Відповіді:


169

Ви можете використовувати encodeURIComponent () .

Він уникне всіх символів, які не можуть траплятися дослівно в URL-адресах:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

У цьому прикладі символ амперсанда &буде замінено екранованою послідовністю %26, яка є допустимою в URL-адресах.


Цього достатньо для надійного уникнення даних чи цього достатньо, щоб уникнути проблеми з амперсандом?
Wottensprels

@Sprottenwel, досить правильно закодувати всі дані. Що ви маєте на увазі під цим словом "надійно"?
Фредерік Хаміді


9

Вам потрібно url-уникнути амперсанда. Використання:

var wysiwyg_clean = wysiwyg.replace('&', '%26');

Як зазначає Вольфрам, це добре обробляється (разом з усіма іншими спеціальними символами) encodeURIComponent.


4

Відповідь Раміля Амра працює лише для персонажа &. Якщо у вас є інші спеціальні символи, вам слід використовувати PHP htmlspecialchars() та JS encodeURIComponent().

Ви можете написати:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

А на стороні сервера:

htmlspecialchars($_POST['wysiwyg']);

Це гарантуватиме, що AJAX передаватиме дані, як очікувалося, і що PHP (на випадок, якщо ви видалите дані до бази даних) забезпечить роботу даних, як очікувалося.


1

Ви можете кодувати рядок, використовуючи кодування Base64 на стороні JavaScript, а потім декодувати його на стороні сервера за допомогою PHP (?).

JavaScript ( документ )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( Документ ):

var wysiwyg = base64_decode( $_POST['wysiwyg'] );

1

Кращий спосіб - використовувати бібліотеку JavaScript, таку як jQuery, і встановити параметр даних як об’єкт, а потім дозволити jQuery виконувати кодування, наприклад:

$.ajax({
  type: "POST",
  url: "/link.json",
  data: { value: poststr },
  error: function(){ alert('some error occured'); }
});

Якщо ви не можете використовувати jQuery (що в наш час є стандартним), використовуйте encodeURIComponent .


1

Ви можете передавати свої аргументи, використовуючи цю функцію encodeURIComponent, щоб вам не довелося турбуватися про передачу будь-яких спеціальних символів.

data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') 

АБО

var someValue = 'Dolce & Gabbana';
data: "param1=getAccNos&param2="+encodeURIComponent(someValue)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.