#php #javascript
#php #javascript
Вопрос:
Я использую, как
$myPage .= '<td><a href='javascript:editProduct('
.$row['id']
.',"'
.$row['name']
.'")'>Edit</a></td>';
значение where $row['name']
заключено в кавычки. он ломается. как мне решить проблему как со стороны php, так и со стороны js…
$row['name']
это значение из базы данных. и оно будет иметь значение типа pradeep's
и pradeep"s
также
я использовал как
$myPage .= '<td><a href='javascript:editProduct('.addslashes($row['id']).',"'.addslashes($row['name']).'")'>Edit</a></td>';
это решает проблему двойных кавычек. но когда у меня есть одинарные кавычки в значении, ссылка javascrit выглядит следующим образом
javascript:editProduct(28,"pradeep
это на самом деле ломается..
И как мне убрать косые черты, добавленные addslashes в javascript..
ОБНОВЛЕНИЕ — ОКОНЧАТЕЛЬНЫЙ КОД
$myPage .= '<td><a href='javascript:editProduct('.$row['id'].',"'.htmlentities($row['name'],ENT_QUOTES).'")'>Edit</a></td>';
и js выглядит как
function editProduct(id,name){
alert(name);
}
может ли кто-нибудь решить мои проблемы
Комментарии:
1. Не уверен, понял ли я ваш вопрос, но, похоже, вам нужно использовать кавычки
$row['name']
перед его использованием.2. Не забывайте, что одинарные и двойные кавычки — не единственные проблемные символы для этого типа кода, вам также необходимо избегать обратной косой черты, возврата каретки, перевода строки, перевода строки, возможно, символов табуляции… (в зависимости от ваших данных, конечно: вы можете быть уверены, что некоторые из этих символов никогда не будут встречаться)
Ответ №1:
Попробуйте:
$myPage .= "<td><a href='javascript:editProduct({$row['id']},""
. htmlentities( $row['name'] )
. "")'>Edit</a></td>";
htmlentities
поведение по умолчанию заключается в преобразовании двойных кавычек и оставлении одиночных кавычек в покое, если вам требуется преобразовать одинарные и двойные кавычки, тогда назовите это следующим образом:
htmlentities( $row[ 'name' ], ENT_QUOTES )
Кроме того, использование { .. }
в "..."
строках является правильным способом замены переменных.
Комментарии:
1. @Oerd — я думаю, вы неправильно поняли мой вопрос. пожалуйста, посмотрите мой вопрос еще раз.
2. @pradeep ты прав, я слишком поторопился с запуском, тогда, я думаю, твой выбор — это перенос
$row['name']
в вызовhtmlentities
.3. @Oerd — но когда у меня есть значение, подобное pradeep «s, функция становится похожей на javascript:EditProduct(28,»pradeep»s»), что нарушает работу функции. она не экранирует двойные кавычки
4. @pradeep
htmlentities( 'pradeep"s' )
выведетpradeepamp;quot;s
5. @Oerd — я получаю ошибку типа Ошибка: отсутствует) после списка аргументов Исходный файл: javascript: EditProduct(29,»p»s») Строка: 1, столбец: 18 Исходный код: EditProduct(29,»p»s»)
Ответ №2:
Строка PHP
'<a href='javascript:editProduct('.$row['id'].',"'.$row['name'].'")'>';
выходные данные (предполагающие некоторые значения)
<td><a href='javascript:editProduct(123,"abc")'></td>
Предположительно, он прерывается, если $row[‘name’] содержит «цитату. Вы могли бы заменить такие кавычки на » в строке, прежде чем выводить ее с помощью str_replace('"', '"', $row['name'])
Комментарии:
1. я не могу использовать addslashes вместо str_replace(«‘», «‘», $ строка[‘name’]), которую вы использовали
2. @pradeep addslashes тоже работает. Мне это не нравится, потому что я остаюсь в стороне от всего, что связано с волшебными кавычками, но это нормально.