我有一个php程序,它查看日志文件并将其打印到页面(下面的代码)。我不希望所述网站的用户能够查看包含/
的任何行。我知道我可以使用trim删除某些字符,但有没有办法删除整行?例如,我想保留像#34; Hello"并删除/xx.xx.xx.xx connected
之类的内容。我想删除的所有行都有相同的公共密钥/
。所述日志文件中的人名称周围有<>
个,所以我必须使用htmlspecialcharacters
$file = file_get_contents('/path/to/log', true);
$file = htmlspecialchars($file);
echo nl2br($file);
感谢您的帮助!
编辑: 感谢所有答案,目前正在修补它们!
EDIT2: 最终代码:
<?php
$file = file_get_contents('/path/to/log', true);
// Separate by line
$lines = explode(PHP_EOL, $file);
foreach ($lines as $line) {
if (strpos($line, '/') === false) {
$line = htmlspecialchars($line . "\n");
echo nl2br($line);
}
}
?>
答案 0 :(得分:3)
你的意思是,像这样?
$file = file_get_contents('/path/to/log', true);
// Separate by line
$lines = explode(PHP_EOL, $file);
foreach ($lines as $line) {
if (strpos($line, '/') === false) {
// If the line doesn't contain a "/", echo it
echo $line . PHP_EOL;
}
}
对于任何想知道的人来说,PHP_EOL是“行尾”的PHP常量,并促进不同系统(Windows,UNIX等)之间的一致性。
答案 1 :(得分:0)
使用str_replace
功能 -
http://php.net/manual/en/function.str-replace.php。替代解决方案(在转义特殊字符之前) -
/* pattern /\/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\sconnected/ = /xx.xx.xx.xx connected */
/* pattern will be replaced with "newtext" */
$file = file_get_contents("/path/to/log", true);
$lines = explode("\n", $file);
foreach ($lines as $line)
$correctline = preg_replace( '/\/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\sconnected/', 'newtext', $line );
echo $correctline;
}
答案 2 :(得分:0)
如果您逐行遍历文件,则可以使用preg_match检查该行是否包含/
字符,如果有,则跳过回显。如果没有,首先将它们拆分为新行并迭代该数组。
如果您不想拆分文件,可以使用带有preg_replace
等正则表达式的(^|\n).*/.*(\n|$)
并替换为空字符串。
答案 3 :(得分:0)
<?php
$file = file_get_contents("/path/to/log", true);
$lines = explode("\n", $file);
foreach ($lines AS $num => $line)
{
if ( strpos($line, "/") === false ) // Line doesn't contain "/"
{
echo htmlspecialchars($line) . "\n";
}
}
?>