2015-01-05 2 views
0

Я использую php/mysqli для чтения в комментариях, но различные комментарии в таблице имеют либо одну цитату, либо двойную кавычку.PHP MySQLi escape-кавычки

Я сохраняю комментарии в атрибуте данных. Используя хром-консоль, я вижу, где цитата бросает весь код из-под удара.

<?php 
    echo "<td><a href='' class='comment' data-toggle='modal' data-comment='".htmlentities($row[comment])."'>" . $row[partner_name] . "</a></td>"; 
?> 

Как вы можете видеть в приведенном выше коде, я попытался использовать htmlentities. Я также пробовал добавление и комбинацию из двух.

В любом случае, я все еще не могу получить комментарий для правильного отображения из-за цитаты внутри таблицы mysql.

Есть ли другая функция php, которую я могу исправить?

Пожалуйста, дайте мне знать. enter image description here

Непосредственно выше - снимок экрана с хромированной консоли. Сразу после слов POTENTIAL 53 есть одна цитата, которая отбрасывает мой код. Весь другой оранжевый текст читается как HTML, когда он должен быть частью комментария.

Должен быть способ прочитать одиночную кавычку как часть строки.

Просьба сообщить.

+0

В чем проблема? Что такое сгенерированный источник? – SLaks

+0

Я вынимаю данные из базы данных mysql. Я уже использовал запрос для извлечения необходимых данных. Наверное, я пытался обойти весь код и просто показать, где проблема, которая является строковыми данными для [комментариев]. Должен ли я отображать используемый запрос? –

+1

показать нам, какая ошибка отображается на выходе. – crazymoin

ответ

1

Передайте флаг, ENT_QUOTES, в вашу функцию htmlentities. См. http://php.net/htmlentities. Это заменит кавычки с указанием цитаты и не позволит ей выйти из атрибута data-comment.

+0

Г-н Олсен под мной правильно, что возвратные символы также нужно заменить. –

2

Ну, есть две проблемы:

  1. Вы должны кодировать материал, особенно цитаты:

    $text = htmlentities($value, ENT_QUOTES); 
    
  2. Атрибут title не работает с новой строкой, так что вам придется иметь дело что. Что-то, как это должно сделать работу:

    $text = preg_replace('/\r?\n/', '#xA;', $text); 
    
0

Попробуйте избежать цитаты в ваших данных. Что-то к этому влиянию:

$pattern = "/\"|\'/"; 
$replace = '\\\"'; 
$subject = $row[comment]; 
$rowComment = preg_filter($pattern, $replace, $subject); 

* Совет. Вы также можете отфильтровать данные перед их хранением.

Описание: echo $ rowComment будет производить строку со всеми кавычками, экранированными;