PHP链接从CSV错误(href值可能太长?)



我不是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个字符,则参数必须更大。

最新更新