PHP替换&与&不是& amp;

时间:2012-01-04 10:52:13

标签: php

目前我有:

//replace common characters
$search = array('&', '£', '$'); 
$replace = array('&', '£', '$'); 
$html= str_replace($search, $replace, $html);

此代码的问题在于,如果&已经转换它将尝试再次转换它。我如何确保不会发生这种情况?

2 个答案:

答案 0 :(得分:5)

我会使用PHP具有的内置函数来转义HTML字符:

而不是滚动我自己,因为它更容易。 htmlentities()htmlspecialchars()使用double_encode参数明确处理此问题:

  

当关闭double_encode时,PHP不会编码现有的html   实体。默认是转换所有内容。

答案 1 :(得分:1)

我给出了一个例子,但是如果你有像' & '这样的后者,它会起作用,然后希望这对你有用:

$str = 'India & Aust & New ';
$regex = '/(\s\&\s)/i';
$replace = ' & ';

if(preg_match($regex, $str)){
    $new_str = preg_replace($regex, $replace, $str );

    echo '<pre>';
    echo htmlspecialchars($new_str, ENT_QUOTES);
    echo '</pre>';
}
else{
    echo 'Not matched!';
}

但请记住,如果你在&符号的两边都有空格或任何你想要的东西,这将有效。否则请按@Treffynnon答案..