我正在制作一个网站,其主要功能是每个目录中的文件列表,可以下载。我还有一个/assets 目录,其中复制了目录树,但每个页面都有必要的图像/脚本,还有.csv用于注释的文件,以及每个文件的信息文件,我想在用户单击按钮时显示在 JavaScript 警报中。
我使用 PHP 动态列出每个目录中的所有文件,以及文件大小和其他一些信息。我已经设法为每个文件获取了一个按钮,如果信息文件不存在,它会提醒"没有信息"。但是,如果该文件确实存在,我会得到两个 JavaScript 错误之一,要么是SyntaxError: unterminated string literal
,要么是SyntaxError: missing ) after argument list
。
我的带有错误的按钮的源代码最终在警报中的最后一个引号之后被分成两行,所以我使用 PHP trim()
函数删除文件中剩余的任何n
或r
,但它什么也没做。
至于第二个错误,我尝试使用 PHP 的 htmlentities
和 htmlspecialchars
删除文件中的任何引号(因为此错误一定与此有关),但同样,这没有任何作用。
我列出文件的代码是这样的:
foreach(glob('*') as $filename){
if ($filename[strlen($filename) - 1] != '~'){
$info = '';
$file_type = filetype($filename);
$infoPath = __DIR__ . '/files' . $_SERVER['REQUEST_URI'] . $filename . '.txt';
if (file_exists($infoPath)){
$handle = fopen($infoPath, 'r');
$info = fread($handle, filesize($infoPath));
fclose($handle);
}
if ($info == ''){
$info = 'No info :(';
}
if ($file_type == 'dir'){
echo "<tr><td><img src="/assets/images/$file_type.png" alt="$file_type" width="16px" height="16px" /><a href="$filename">$filename</a></td><td>-</td><td>" . date ("F d Y H:i:s", filemtime($filename)) . "</td><td><button onclick="alert('" . trim(htmlentities(htmlspecialcharacters($info))) . "')">Info</button></td></tr>";
}
else{
echo "<tr><td><img src="/assets/images/$file_type.png" alt="$file_type" width="16px" height="16px" /><a href="$filename">$filename</a></td><td>".filesize($filename)."</td><td>" . date ("F d Y H:i:s", filemtime($filename)) . "</td><td><button onclick="alert('" . trim(htmlentities(htmlspecialcharacters($info))) . "')">Info</button></td></tr>n";
}
}
}
那么,首先,我如何终止字符串文字,其次,我该如何处理假定的参数列表?
我有一种感觉,我可能不得不使用AJAX,但我会认为我可以将一个字符串回显到JavaScript中。
我认为您的回声中有几个错误。转义和串联不好。
-
您应该使用
'
来更好地了解转义代码。 -
某些 php 代码未正确连接。
-
CSS 代码(宽度和高度)必须位于
style
属性中。
例:
echo '<tr><td><img src="/assets/images/'.$file_type.png.'" alt="'.$file_type.'" style="width:16px; height:16px;" /><a href="'.$filename.'">'.$filename.'</a></td><td>-</td><td>'.date("F d Y H:i:s", filemtime($filename)).'</td><td><button onclick="alert("'.trim(htmlentities(htmlspecialcharacters($info))).'")">Info</button></td></tr>';
实际上,我认为您不需要使用 Ajax,因为您的代码不需要在特定事件时调用,而是在页面加载时调用一次(如果我错了,请纠正我)。
所以,只要纠正你的echo
,应该没问题。
希望对您有所帮助。