2015-11-09 3 views
1

Я пытаюсь передать переменную PHP, содержащую текстовое значение (содержимое html), прочитанное из базы данных SQL, в функцию Javascript. Я пытаюсь использовать разные подходы, такие как json_encode(utf8_encode()) и preg_replace(), но ни один из них не работает.Передача многострочной переменной PHP на функцию Javascript

Вот мой код:

<?php 
$db = new PDO('mysql:host=localhost;dbname=ramtin_data;charset=utf8', 'root', ''); 

foreach($db->query('SELECT * FROM posts') as $row) 
{ 
    $qtitle = $row['title']; 
    $qcontent = $row['content']; 
    $qpage = $row['page_id']; 

    $qcontent = json_encode(utf8_encode($qcontent)); 

    echo "<script type='text/javascript'> 
     displayPost('$qtitle', '$qcontent'); 
    </script>"; 
} 
?> 

Сразу хочу отметить, что, когда я вставить строку в моей базе данных с простой линии (в том числе и "/) в content поле, приведенный выше код работает.

Я также попытался следующий код и получил тот же результат:

$qcontent = preg_replace('/\v+|\\\[rn]/','<br/>', $qcontent); 

Значение внутри content поля в базе данных является следующая строка:

<img src="images/death_truck_titleDisplay.jpg" width="400" height="140" class="globalImageStyle" /><p class="postBodyContentParagraph">The work for another Construct2 game "<a href="http://ramt.in">Death Truck</a>" has been started.</p><p class="postBodyContentParagraph">I've had the idea since a few weeks ago and I'm amazed that how much it had developed into better shapes and more complex gameplay ideas only through the first weeks that I've started working on the graphics and the game codes/logic.</p><p class="postBodyContentParagraph">I'm actually done with the truck and pedestrian graphics and movement codes (plus the interaction code between pedestrians and the truck) and have included the game in the projects page as a Work In Progress. You can check some of the graphics and the idea of the whole game (plus some gameplay ideas) in the projects page.</p> 

Как я должен пройти приведенное выше значение для функции displayPost() Javascript?

UPDATE


Проблема была с одинарные кавычки внутри значения. В принятом решении было предложено заменить все ' s на \' с использованием $qcontent = str_replace("'", "\'", $qcontent);, который отлично работал.

В результате, однако цитирует json_encode() который я нашел самый простой способ удалить оберточной " с, чтобы использовать content.slice(1, content.length - 2) (content является вторым параметром, который относится к $qcontent в разделе PHP кода) внутри функции Javascript ,

+0

Котировки должны быть экранированы. действительно, это должен быть запрос ajax. вы можете отправить html внутри json, установив флаг hexquote. просто Google, как кодировать html в json. – r3wt

+0

Цитаты не должны быть экранированы, если вы используете два разных. –

+0

Что означает «не работает»? –

ответ

0

Потому что вы завершаете свой вывод в одинарных кавычках ', вам нужно их избежать.

$qcontent = str_replace("'", "\'", $qcontent); 
+0

Спасибо, это ответ, который я искал. Как раз для пояснения, 'json_encode()' не избегает одиночных кавычек '' '? –

+0

json_encode преобразует только массив или объект в формат JSON. Этот формат может содержать строки, которые исключают кавычки в строках, которые совпадают с эскапсулирующей цитатой. В противном случае вы не знаете, где заканчивается строка. Таким образом, вы можете видеть экранированные строки в JSON, но всегда в двух неэкспериментированных кавычках. – moorscode

+0

На самом деле эти две неэкранированные кавычки (обертывание двойных кавычек) были успешно переданы в функцию Javascript, и мне пришлось использовать функцию split() в JS, чтобы избавиться от них. Но когда я помещаю одинарные кавычки внутри строки, это больше не работает (прежде чем пытаться использовать свой код). Исправьте меня, если я ошибаюсь, мне кажется, что json_encode() не избегает одиночных кавычек. –

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