不要用某些字符回应事物

时间:2013-08-04 19:17:21

标签: php

我有一个php程序,它查看日志文件并将其打印到页面(下面的代码)。我不希望所述网站的用户能够查看包含/的任何行。我知道我可以使用trim删除某些字符,但有没有办法删除整行?例如,我想保留像#34; Hello&#34;并删除/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);
    }
}
?>

4 个答案:

答案 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";
        }
    }
?>