Простая проблема, что я просто не могу найти «правильный» ответ.
У меня есть PHP-скрипт, который читает имена людей из базы данных и отображает их в таблице. В каждой строке я связал имя человека с функцией JavaScript, которая отображает всплывающее окно с именем человека в качестве заголовка – код PHP и итоговый html:
$name = $results['name']; echo '<a href="javascript:void(0)" onclick="popup(this, '\' . $name . '\')">' . $name . '</a>';
С html:
<a href="javascript:void(0)" onclick="popup(this, 'Steve Smith')">Steve Smith</a>
Все работает отлично, за исключением случаев, когда я нажимаю имя с дефисом, например «Брайс Д'Арнуд», что приводит к апострофе, нарушающему html. Чтобы обойти эту проблему, я использую функцию PHP addslashes()
, в результате чего появляется следующий код & html:
$name = $results['name']; echo '<a href="javascript:void(0)" onclick="popup(this, '\' . addslashes($name) . '\')">' . $name . '</a>';
С html:
<a href="javascript:void(0)" onclick="popup(this, 'Bryce D\'Arnoud')">Bryce D'Arnoud</a>
Все работает нормально, но по какой-то причине JavaScript не удаляет escape-символ, а в функции popup (), если я предупреждаю имя, я вижу «Bryce D \ 'Arnoud»,
function popup(t, name) { alert(name); }
Любые предложения относительно того, где я ошибаюсь?
Во-первых, жизнь была бы намного проще, если бы вы не смешивали JavaScript в своей разметке. Вместо этого используйте PHP-форму семантической разметки и получите доступ к данным с помощью JavaScript:
$name = $results['name']; echo '<a href="#" class="popup" data-name="' . $name . '">' . $name . '</a>';
И затем получить доступ к значению (я использую jQuery для этого для терпения):
$('.popup').click(function(e) { e.preventDefault(); alert($(this).attr('data-name')); });
И в родной JS (я думаю):
document.getElementsByClassName('popup').onclick = function (e) { e = e || window.event; e.preventDefault(); alert(this.getAttribute('data-name')); };
Не ускользнуть от работы с двойными кавычками? (не испытано)
echo "<a href=\"javascript:void(0)\" onclick=\"popup(this,'$name')\">$name</a>";
EDIT: Извините за отсутствие точки. Однако использование preg_replace
для замены одиночных кавычек своими объектами HTML может сделать это.
echo '<a href="javascript:void(0)" onclick="popup(this,\'' . preg_replace("/'/",''',$name) . "')\">$name</a>";
EDIT 2 Фактически преобразование всех из $name
может быть более чистым:
$name = preg_replace("/'/", ''', $results['name']); echo "<a href=\"javascript:void(0)\" onclick=\"popup(this,'$name')\">$name</a>";