我不是php专家…如果我忽略了什么,请原谅我…
我有一个csv文件,有两列,看起来像这样:
john, VSgv4lEpuGS0vHIKapJZV7o...
jane, yHKy6NW6YJZzloFhLDQUJIN...
第一个具有简单的名称,第二个具有1000多个字符的字符串。我试图将这些回声到一个页面中,在这个页面中,简单的名称变成了一个带有长字符串作为源的超链接。我有以下内容:
<?php
if (($list = fopen("list.csv", "r")) !== FALSE) {
while (($data = fgetcsv($list, 1000, ",")) !== FALSE) {
echo "<div><a href='localhost:8888/folder/".$data[1]."'>" . $data[0] . "</a></div>";
}
fclose($list);
}
?>
所发生的情况是名称显示为链接,但href包含长字符串的最后30多个字符之外的所有内容。最奇怪的是,剩下的30多个字符显示在div下面……在它自己的范围内,在它自己的范围内模仿我为链接名称设置的结构)
…知道为什么会这样吗? &&如何修复????…
我的第一个猜测是,在你的很长的字符串中,你有一个'<'或'>'字符打破了html。你可以尝试将$data[1]包装在函数htmlspecialchars()中,它可以转义这些字符。
文档:http://php.net/manual/en/function.htmlspecialchars.php
例子:
echo "<div><a href='localhost:8888/folder/".htmlspecialchars( $data[1] )."'>" . htmlspecialchars( $data[0] ) . "</a></div>";
这一行:
while (($data = fgetcsv($list, 1000, ",")) !== FALSE) {
从文件中读取一千个字符。然后处理它。如果一个字段超过了这个长度,它将处理它所能处理的,然后在下一次while循环的迭代中继续处理该字段的其余部分。
最好使用fgets将所有内容读入变量并进行处理;或者可能只是将数量增加到1000以上作为短期解决方案。
引用fgetcsv()
的第二个参数(length
)的文档:
必须大于在CSV文件中找到的最长行(以字符为单位)(允许尾随行结束字符)。
所以看一下,你最长的行有多长,并相应地调整参数。如果第二个条目超过1000个字符,则参数必须更大。