Взорваться на амперсанде, PHP

#php

#php

Вопрос:

Может кто-нибудь сказать мне, что я делаю неправильно, о том, как наложить массив на амперсанд с помощью PHP? Я пытаюсь отправить строку в AJAX, которая исходит из этого массива; и ничего из того, что я пытаюсь, не работает ->

 $mrq = (implode("amp;",$mrqa));
  

выдает

 macro0=A¯o1=B
  

Тем не менее, я ожидал, что это даст

 macro0=Aamp;macro1=B
  

Есть ли способ обойти это? Я использую UTF-8, так что это не должно быть проблемой.

Комментарии:

1. Для построения запроса вы должны использовать http_build_query

2. Проблема не во сжатии, проблема в выводе. Используйте htmlspecialchars или смотрите вывод в виде обычного текста, а не в html.

3. Убедитесь, что вы отображаете как UTF-8, если ваши строковые значения $ mrqa равны UTF-8

4. @OZ_ 1 Вы правы — это потому, что браузер интерпретирует часть строки как HTML-объект. Это отображается amp;macr как ¯ . Ищите amp;macr; на этой странице .

5. @OZ_ Пожалуйста, опубликуйте ответ 😉 Вы только что ответили на вопрос, и нет кнопки «поддержать комментарий в качестве ответа»…

Ответ №1:

Проблема не в implode, проблема в выводе, потому что amp;macr это объект html.
Используйте htmlspecialchars или смотрите вывод в виде обычного текста, а не в html.
Также, как упоминалось в комментариях, для построения вашего запроса вы можете использовать функцию http_build_query.

Ответ №2:

Вы можете преобразовать каждый параметр, прежде чем вводить URL.

 foreach($mrqa as $key => $m)
$mrqa[$key] = urlencode($m);

$mrq = implode("amp;",$mrqa);