2013-11-28 2 views
1

У меня есть страница php, которая вызывается через AJAX. и в основном он извлекает какое-то значение из моей базы данных и echos обратно в таблицу со входами и т. д. Проблема заключается в том, что строка, которую он извлекает, содержит кавычки (на самом деле только одиночные кавычки, похоже, будут выполняться). Поэтому на странице PHP есть что-то вроде этого:экранирование одиночных кавычек для вызовов ajax

$value = htmlentities($DB_result->cloumn); 

echo'<input type = "button" onClick = "$(\'#something\').val(\''.$value.'\');" />' 

так что если $value = «привет», никаких проблем, но если: $value = «привет», страница, которую я делаю вызов AJAX из подбрасывает некоторые такая ошибка: Синтаксическая ошибка: неожиданный идентификатор. , поэтому я думаю, что котировки в $ value не сбежали, и я думал, что это будет с htmlentities. любые идеи, как решить эту проблему. Спасибо.

+0

Простейшее решение не смешивает навязчивый и ненавязчивый javascript. Почему используется jQuery, если вы хотите, чтобы ваш скрипт был встроен? – charlietfl

+0

очень мало встроено, но для этой цели это лучшее решение. – user2014429

ответ

4

Проблема заключается в том, что $value содержит одинарные кавычки, которые мешают правильному анализу javascript. от the manual entry for html entities:

all characters which have HTML character entity equivalents are translated into these entities.

это означает, что ваши одиночные кавычки не экранируются, они только переводятся таким образом, браузеры лучше понять. Вы должны использовать addslashes():

$value = htmlentities(addslashes($DB_result->cloumn)); 

"'hello'" станет "\'hello\'" который в браузере будет выглядеть следующим образом:

<input type = "button" onClick = "$('#something').val('\'hello\'');" /> 

который припишут строку 'hello' (с одинарными кавычками) для значения атрибута из $('#something')

+0

, читая о htmlentities, скажите мне, если я ошибаюсь: он не ускользает от значений, он просто сообщает html, что они более понятны. одинарные кавычки все равно будут одинарными кавычками и будут по-прежнему оцениваться как таковые. из http://php.net/manual/en/function.htmlentities.php: «все символы, имеющие эквиваленты сущности HTML-символов, переводятся в эти сущности». –

+0

хорошая идея, к сожалению, никаких изменений. Спасибо за предложение. – user2014429

+0

попробуйте с addlashes внутри html сущностей. возможно, addlashes не будет распознавать слэши как таковые при переводе как html-сущности. –

1

Try:

$value = htmlentities($DB_result->cloumn, ENT_QUOTES, "utf-8"); 

Проходя через ENT_QUOTES как флаг будет конвертировать как двойные, так и одинарные кавычки.

+0

@ user2014429 Тогда вам нужно будет показать нам полученный HTML. –

+0

не так много, чтобы показать действительно, в основном, если вы нажмете кнопку, как показано в примере выше, она обычно вызывает ошибку с ошибкой, неожиданной или ILLEGAL синтаксической ошибкой, то есть, если результат имеет одинарные кавычки. и $ ('# something') не заполняется. – user2014429

+0

@ user2014429 Как выглядит исходный HTML-источник после загрузки вашей страницы? –

Смежные вопросы