使用带有html特殊字符代码的preg_match替换无效的html特殊字符

<?php
    $tr_no = mysql_num_rows($query);
    $ii = 0; //iterator;
    while($news = mysql_fetch_array($query))

        //replacing special characters
        $replacename = eregi_replace(" ",  "-", $news['3']);
        $pattern = array();
        $pattern[0] = '-';
        $pattern[1] = "'";
        $replace = array();
        $replace[0] = '&#45;';
        $replace[1] = '&#39;';
        $news['2'] = preg_replace($pattern,$replace,$news['2']);
        $news['1'] = preg_replace($pattern,$replace,$news['1']);
        echo "<div style='width: 600px;' align='center'>";
        if($ii % 2 == 0){
            echo "<div style='width: 290px; height: 350px; float: left; padding:5px;'><h3 style='color:#ff0000; font-size: 14px;'>".$news['2']."</h3><p style='font-size:12px;'>".$news['1']."...</p><p><a href=\"".$href ."/". $replacename ."/item/".$news['0']."\">read more...</a></p></div>";
        }
        if($ii % 2 == 1){
            echo "<div style='width: 290px; height: 350px; float: left; padding:5px;'><h3 style='color:#ff0000; font-size: 14px;'>".$news['2']."</h3><p style='font-size:12px;'>".$news['1']."...</p><p><a href=\"".$href ."/". $replacename ."/item/".$news['0']."\">read more...</a></p></div>";
        }
        echo "</div>";
        $ii++;
    }
?>

The code output strings from the database while looping, but some characters appear invalid in an html format, see details: http://ipaidabribenaija.com/newsletter2.php I have also used str_replace() in place of preg_replace(), but the functions are not effective in this situation.

Please how can i achieve this task?

try

$str = mb_decode_numericentity($str, array(0, 0x10FFFF, 0, 0xFFFFFF), 'UTF-8');

ie

$news[2] =  mb_decode_numericentity($news[2], array(0, 0x10FFFF, 0, 0xFFFFFF), 'UTF-8');

If isn't an encoding/decoding issue, why don't you try with htmlentities php's function?