如何排除特定字符串被PHP的清理过滤器过滤掉?

时间:2016-04-18 18:58:12

标签: php

所以我想要做的是打印出数组中的所有字符串,但用<p>标记分隔它们。

我试过了:

echo filter_var( implode( "<p>", $matches[0]), FILTER_SANITIZE_SPECIAL_CHARS); echo "</p>";

但结果是

string1</p>string2</p>string3</p>

而不是

<p>string1</p> <p>string2</p> <p>string3</p>

有什么想法吗?

编辑:

如果您需要实际的完整代码,请转到:

<?php
$file = 'logfile.log';
$searchfor = $_POST['name'];
$contents = file_get_contents($file);
$pattern = preg_quote($searchfor, '/');
$pattern = "/^.*$pattern.*\$/m";
if(preg_match_all($pattern, $contents, $matches)){
echo "Found matches:\n";
echo filter_var( implode( "<p>", $matches[0]), FILTER_SANITIZE_SPECIAL_CHARS);
}
echo "</p>";
else{
   echo "No matches found";
}
?>

1 个答案:

答案 0 :(得分:0)

您应该将htmlspecialchars()用于要在页面上安全显示的任意字符串,而不是filter_var()

这是完整的解决方案:

foreach ($matches[0] as $str) {
    echo '<p>'.htmlspecialchars($str).'</p>';
}

或者,如果你真的想要一个(丑陋的)单线:

echo implode('', array_map(function ($str) { return '<p>'.htmlspecialchars($str).'</p>'; }, $matches[0]));