【问题标题】:html getting garbled from phphtml 从 php 得到乱码
【发布时间】:2010-09-25 12:25:48
【问题描述】:

我有一个 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 结果与我粘贴的最后一个链接非常相​​似。数据库中的数据似乎正确,那么可能导致此问题的原因是什么?

【问题讨论】:

    标签: php javascript mysql html csv


    【解决方案1】:

    让我想起了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 位于不同的表中。

    编辑编辑:

    $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 +++++++++++++++++++++++++++++++++++++++++ -->
    

    【讨论】:

    • 对不起,我没有更新足够的链接。问题的全部要点是article_desc 不是空的并且我没有使用json_encode,我会解决这个问题。
    • 所以你给了我-1,因为你的问题有误导性?!
    • 没有?你对我很有帮助,我给了你一个,很抱歉它是-1,它不是故意的,现在应该修复。
    • 我对您的第二次编辑感到困惑,因为没有 json 编码,我发布的最后一个链接中生成的 html 是分配给 document.write 的内容,表明 article_desc 是正确的而不是空的?跨度>
    • 我不明白“指示的article_desc是正确的而不是空的?”,但它是一个错误的案例。 :P 当你得到结果时,你以小写形式查询,当你没有得到结果时,你以大写形式查询。
    【解决方案2】:

    CSV 文件有点乱。似乎这些字段由制表符分隔,而不是被任何东西包围。这对于简单数据可能没问题,但是当您开始将 HTML 放入其中时,您会遇到问题 - 查看one of your other questions,看起来 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 的代码中将 \n 替换为 \\n 和将 \r 替换为 \\r

    【讨论】:

    • 好的,这可能是问题所在,我认为在处理可能包含任何其他类型字符的数据时,制表符是最好的分隔符。我没想到 html 会包含制表符。由于 html 可以包含任何内容,我不知道使用什么分隔符
    • \t 和 \n 将由 json_encode 处理?正如您在 HTML 代码中看到的那样,这也不是问题所在。
    • 那么是什么导致部分 html 出现在 COUNTRYCODE 中?
    • 以国家代码结尾,因为 csv 解析器认为 HTML 字段实际上是几个字段,所以它不同步并且国家代码数据丢失
    • @OIS - 我认为问题在于 MySQL 数据库中有错误的数据 - json_encode 在这一点上并不真正相关。除非我严重误解了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多