我有一个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结果与我粘贴的最后一个链接非常相似。数据在数据库中似乎是正确的,那么可能导致这个问题的原因是什么呢?
答案 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。 所以
编辑编辑:
$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