html从php乱码

时间:2008-12-05 13:02:37

标签: php javascript mysql html csv

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

EDIT2:

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

2 个答案:

答案 0 :(得分:2)

让我想起this question

你在这里看到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_DESC对于该ARTICLE_NO为空。
  2. ARTICLE_DESC的名称不正确。
  3. ARTICLE_DESC在不同的表格中。
  4. 编辑编辑:

    $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 :(得分:1)

CSV文件有点混乱。看起来这些字段是由制表符分隔的,而不是被任何东西包围。对于简单的数据,这可能没问题但是当你开始把HTML放入时你会遇到问题 - 看one of your other question看起来像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

如果其余问题与换行相关,您可以在导出每个字段的代码中用\n \\n\r替换\\r字符串CSV