0

我有一个 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

有一个未关闭的样式标签可防止显示页面的其余部分,并阻止打开弹出窗口。据我所知,我已将其缩小为 php 问题,因为 mysql 中的数据似乎很好。

编辑:

我只是尝试使用以下代码从数据库中仅选择 article_Desc:

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

结果是这样的:

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

编辑2:

包含 style 标签的 countrycode 变量似乎有问题。当我删除它时,会显示图片并创建弹出窗口,只有 html 结果与我粘贴的最后一个链接非常相​​似。数据库中的数据似乎正确,那么可能导致此问题的原因是什么?

4

2 回答 2

2

让我想起了这个问题

你在这里看到 PHP 代码

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

在 HTML 代码中

child1.document.write("");

这意味着 json_encode($row2["ARTICLE_DESC"]) 输出“”。由于 json_encode('') 输出 "",这意味着 $row2["ARTICLE_DESC"] 为空。

编辑:

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

不需要第二个 sql2,因为第一个 $sql 应该已经包含 ARTICLE_DESC。所以

  1. 该 ARTICLE_NO 的字段 ARTICLE_DESC 为空。
  2. ARTICLE_DESC 不是正确的名称。
  3. ARTICLE_DESC 在不同的表中。

编辑编辑:

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

名称是 article_desc 而不是 ARTICLE_DESC。

编辑评论:

将所有出现的 ARTICLE_DESC 更改为 article_desc。

编辑现在你得到了 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 +++++++++++++++++++++++++++++++++++++++++ -->
于 2008-12-05T13:11:22.353 回答
1

CSV 文件有点乱。这些字段似乎由制表符分隔,没有被任何东西包围。这对于简单数据可能没问题,但是当您开始将 HTML 放入其中时,您会遇到问题 - 查看您的其他问题之一,看起来 CSV 解析器正在混淆并将 HTML 的一个字段拆分为多个 - 这似乎每次遇到选项卡时都会发生(也许还有双引号?)

您可以更改 CSV 文件的格式吗?我建议您使用逗号分隔字段,并为更复杂的字符串(如 HTML)定义一个封闭字符(例如双引号) - 我认为您需要确保字符串中的任何双引号也是逃脱了。另请记住,您可能需要从这些字符串中删除或转义换行符,具体取决于解析它的内容,但我并不完全确定这一点。

发表评论后编辑

您无需担心包含分隔符的字符串,只要它被字符包围即可。如果您需要包含三个字段的行,并且三个字符串值是:

String1
String2
Stri,ng3

以下内容无效,解析器会将其视为四个字段

String1,String2,Stri,ng3

以下有效的,因为分隔符被双引号“括起来”

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

然后,当您想在字符串中使用双引号时,它会变得更加棘手-然后需要对其进行转义。如果你想代表

String1
String"2

CSV 字段可以像

"String1", "String\"2"

如果我没记错的话,您是使用 LOAD DATA? 导入 MySQL 的,所以对于上面的示例,您可能需要使用类似的选项

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

我不确定 MySQL 将如何处理封闭字符串中的换行符,我似乎找不到太多关于此的内容。如果它逐行读取文件,您可能需要遇到问题。

编辑 2

如果剩余的问题与换行符相关,您可以在将每个字段导出到 CSV 的代码中对\nwith\\n\rwith进行字符串替换\\r

于 2008-12-05T13:39:20.410 回答