HTML искажается от PHP - PullRequest
       9

HTML искажается от PHP

0 голосов
/ 05 декабря 2008

У меня есть база данных mysql, которая в качестве одного из полей содержит описание html. Это описание не находится под моим контролем, и получается и вставляется автоматически. Пример одного из этих описаний здесь:

http://www.nomorepasting.com/getpaste.php?pasteid=22492

Данные изначально экспортируются из базы данных доступа и, похоже, остаются нетронутыми. Пример экспортируемых данных здесь:

http://www.yousendit.com/transfer.php?action=batch_download&batch_id=TTZtWmdsT01kMnVGa1E9PQ

Я пытаюсь вывести переменную, содержащую описание html, во всплывающее окно, чтобы отобразить его как есть. Код, который я пытаюсь использовать для этого, находится здесь:

http://www.nomorepasting.com/getpaste.php?pasteid=22498

Однако он производит следующий HTML-код:

http://www.nomorepasting.com/getpaste.php?pasteid=22462

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

редактирование:

Я только что попытался выбрать только article_Desc из базы данных с этим кодом:

http://www.nomorepasting.com/getpaste.php?pasteid=22494

Что произвело это в результате:

http://www.nomorepasting.com/getpaste.php?pasteid=22496

edit2:

Кажется, проблема в переменной countrycode, содержащей тег style. Когда я удаляю это, изображение отображается и создается всплывающее окно, только с результатами html, очень похожими на последнюю ссылку, которую я вставил. Данные кажутся правильными в базе данных, так что может быть причиной этой проблемы?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2008

Напоминает мне немного о этом вопросе .

Вы видите здесь в коде PHP

child1.document.write(' . json_encode($row2["ARTICLE_DESC"]) . ');

и здесь в HTML-коде

child1.document.write("");

Это означает, что json_encode ($ row2 ["ARTICLE_DESC"]) выводит "". А поскольку json_encode ('') выводит "", это означает, что $ row2 ["ARTICLE_DESC"] пусто.

EDIT:

$sql="SELECT * FROM Auctions WHERE ARTICLE_NO ='$pk'";
$sql2="SELECT ARTICLE_DESC FROM Auctions WHERE ARTICLE_NO ='$pk'";

Нет необходимости во втором sql2, так как первый $ sql уже должен включать ARTICLE_DESC. Так

  1. Поле ARTICLE_DESC для этого поля не заполнено. ARTICLE_NO.
  2. ARTICLE_DESC - неправильное имя.
  3. ARTICLE_DESC находится в другой таблице.

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ:

$query = "SELECT article_desc FROM Auctions WHERE ARTICLE_NO ='220288560247'";

Имя: article_desc, а не ARTICLE_DESC.

РЕДАКТИРОВАТЬ НА КОММЕНТАРИИ:

Изменить все вхождения ARTICLE_DESC на article_desc.

EDIT Теперь, когда вы получили HTML-код, вам нужно заменить

json_encode($row['article_desc'])

с этим

str_replace(array("\n", "\r", "\t"), array('', '', ''), $row['article_desc']);

, что можно сделать в хорошей функции. Просто запомните весь html-код, который вы печатаете в

<!-- text -->

так что вы не увидите ничего в новом окне ...

<!-- +++++++++++++++++++++++++ Bitte ändern Sie im eigenen Interesse nichts an diesem Code! ++++++++++++++++++++++++ -->
<!-- +++++++++++++++++++++++++ Das kann massive Fehldarstellungen ihrer Auktion zur Folge haben! +++++++++++++++++++ -->
<!-- +++++++++++++++++++++++++ ++++++++++++++++++++++++++ Ihr Supreme Team +++++++++++++++++++++++++++++++++++++++++ -->
1 голос
/ 05 декабря 2008

Файл CSV немного беспорядок. Похоже, что поля разделены вкладками и ничем не заключены. Это может быть хорошо для простых данных, но когда вы начнете вводить HTML, у вас возникнут проблемы - глядя на один из ваших других вопросов s, похоже, что анализатор CSV запутывается и разбивает одно поле HTML на несколько - это, кажется, происходит каждый раз, когда он встречает вкладку (и, возможно, также двойные кавычки?)

Можете ли вы изменить формат файла CSV? Я бы посоветовал вам использовать запятые для разделения полей и определить символ вложения (например, двойные кавычки) для более сложных строк, таких как HTML - я думаю, что вам необходимо убедиться, что любые двойные кавычки в строке также убежали. Также имейте в виду, что вам может потребоваться удалить или избежать разрывов строк внутри этих строк в зависимости от того, что их анализирует, но я не совсем уверен в этом.

Изменить после вашего комментария

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

String1
String2
Stri,ng3

Следующий недействителен и будет виден синтаксическим анализатором как четыре поля

String1,String2,Stri,ng3

Следующее является действительным, поскольку разделитель «заключен» в двойную кавычку

"String1", "String2", "Stri,ng3"

Это становится сложнее, когда вы хотите использовать двойные кавычки в строке - тогда нужно будет избежать этого. Если вы хотите представить

String1
String"2

поле CSV может быть экранировано как

"String1", "String\"2"

Если я правильно помню, вы импортировали в MySQL с помощью LOAD DATA ?, так что для приведенных выше примеров вы можете использовать такие параметры, как

FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'

Я не уверен, как MySQL будет обрабатывать разрывы строк в закрытых строках, я не могу найти много об этом. Если он читает файл построчно, могут возникнуть проблемы.

Редактировать 2

Если оставшиеся проблемы связаны с разрывом строки, вы можете заменить строку \n на \\n и \r на \\r в коде, который экспортирует каждое поле в CSV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...