我有以下PHP代码
$links = fopen("./links/links.txt", "r");
if ($links) {
while (($line = fgets($links)) !== false) {
$linkData = explode(" ", $line);
/// The line below is the problematic one
echo "<a href='".$linkData[0]."' class='links-item'>".$linkData[1]."</a><br>";
}
fclose($links);
} else {
die('Error opening file, try refreshing.');
}
你可以看到我已经分开了我遇到问题的行。我有以下文件links.txt
http://example.com Example
http://example2.com Example2
基本上,这会将文本文件中的 URL 添加到锚标记中,并在它旁边添加文本,因为锚点显示文本。它可以工作,但由于某种原因,每个锚标签都以空格结尾,最后一个除外。有人知道为什么会这样以及我该如何解决它吗?
fgets()
返回的字符串包括分隔行的换行符。这将在$linkData[1]
末尾,所以你正在写
<a href='http://example.com' class='links-item'>Example
</a><br>
到输出。
您可以改用fgetcsv()
,指定空格作为字段分隔符。这将为您分解行并自动忽略换行符。
while (($linkData = fgetcsv($links, 0, " ")) !== false) {
echo "<a href='".$linkData[0]."' class='links-item'>".$linkData[1]."</a><br>";
}
fgets()
将换行符和单词字符捕获到字符串中。使用修剪功能删除不需要的空格:
echo "<a href='".trim($linkData[0])."' class='links-item'>".trim($linkData[1])."</a><br>";
或者,如@Barmar所述,您可以使用fgetcsv
函数
使用
var_dump($linkData);
看看 fgets() 返回什么。也许有意想不到的角色。
考虑使用更高级的文件格式,例如,您可以使用 csv 格式并使用 http://php.net/manual/en/function.fgetcsv.php 从文件中检索结果。