我有这个字符串:
$str = "<ul><li>Eüro!</li><li>100 %</li><li>Jäckö<br></li></ul>";
我打算在htmlentities()
内的字符串上使用<li></li>
。所以它会像这样出现:
$str = "<ul><li>Eüro!</li><li>100 %</li><li>Jäckö<br></li></ul>";
htmlentities()
是否有办法或解决方法不转换整个字符串?因为如果我只是htmlentities($str)
,它会将整个字符串转换为:
<ul><li>Eüro!</li><li>100 %</li><li>Jäckö<br></li></ul>
答案 0 :(得分:0)
从documentation,你可以看到你有一些旗帜:
string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )
所以你可以在这里看到一些字符串的输出:
<?php
$str = "A 'quote' is <b>bold</b>";
// Produces: A 'quote' is <b>bold</b>
echo htmlentities($str);
// Produces: A 'quote' is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>
我认为这取决于您的默认字符代码,因此您可以尝试不同的标记。
答案 1 :(得分:0)
找到一种不将它作为单个字符串传递的方法,直到你有htmlentities() - 子函数。将其视为一系列列表项,然后在从中构建<ul>
时调用每个列表项的htmlentities。任何其他意味着你很有可能出现XSS漏洞。
答案 2 :(得分:0)
$str = '<ul><li>Eüro!</li><li>100 %</li><li>Jäckö<br></li></ul>';
function update_li_content($text){
return "<li>".htmlentities($text[1])."</li>";
}
$reg = "#<li>(.*?)</li>#";
$filter_data = preg_replace_callback ( $reg, "update_li_content", $str);
echo $filter_data;
答案 3 :(得分:-1)
您可以创建自己的替换功能:
function parseAccents($in) {
$out=$in;
$toreplace=array(
array('ü', 'ü'),
array('ä', 'ä'),
array('ö', 'ö')
// ...
);
for($i=0; $i<count($toreplace); $i++) $out=str_replace($toreplace[$i][0], $toreplace[$i][1], $out);
return $out;
}
编辑:如果您不想设置整个重音列表,可以使用此模型:
function parseAccents($in) {
$out=htmlentities($in);
$toreplace=array(
array('<', '<'),
array('>', '>'),
// ...
);
for($i=0; $i<count($toreplace); $i++) $out=str_replace($toreplace[$i][0], $toreplace[$i][1], $out);
return $out;
}