Проблема с кавычками при передаче значения в Javascript

#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 тоже работает. Мне это не нравится, потому что я остаюсь в стороне от всего, что связано с волшебными кавычками, но это нормально.