Надеюсь, это не дубликат, но все остальные проблемы с одиночной кавычкой в jQuery-Ajax-вызовах говорили об ошибках, а не о том, что я здесь наблюдаю.
У меня проблема с jQuery-Ajax-вызовами, которые содержат одинарную кавычку в отправленных параметрах - они всегда удваиваются на стороне сервера! Я написал небольшой скрипт для игровой площадки, содержащий как фронтенд, так и бэкэнд, чтобы показать проблему:
playground.php
<?php
if(isset($_REQUEST["foo"])) { ?>
<root>
<fooVal>
<?php echo $_REQUEST["foo"]; ?>
</fooVal>
</root>
<?php
die;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script>
function testSend() {
$.ajax({
type: "get",
url: "playground.php",
data: {"foo" : $("#fooInput").val()},
success: function(data) {
$("#fooResult").text($(data).find("fooVal").text());
}
});
}
</script>
</head>
<body>
<input type="text" id="fooInput" />
<a href="javascript:testSend()">send</a>
<div id="fooResult"></div>
</body>
</html>
Если я ввожу в поле ввода, например:
L'eclisse
div#fooResult содержит после вызова AJAX:
L''eclisse
Каким-то образом скрипт сделал две одинарные кавычки из одной. Изучив с помощью firebug, я вижу, что параметр отправляется правильно только с одной одинарной кавычкой. Но ответ всегда содержит два из них, независимо от того, вывожу ли я (в части PHP в верхней части скрипта) в XML или через json_encode или просто эхо.
Что я уже пробовал:
- используя
encodeURI(($"#fooInput").val())- без изменений - используя
encodeURIComponent(($"#fooInput").val())- без изменений - используя
escape($("#fooInput").val())- это выведет L%27eclisse
У кого-нибудь есть предложение, что я могу сделать? Либо на стороне клиента (javascript), либо на стороне сервера (php) сценария? Заранее спасибо!
L\'eclisseиз клиента, чтобы увидеть, что возвращается? Чтобы добиться этого, вам нужно избежать чего-то вроде этогоvar string = $("#fooInput").val().replace(/'/g, "\\'");- person naththedeveloper   schedule 01.08.2013\''eclisse. - person jwulf   schedule 01.08.2013