为什么我使用相同的数据得到不同的结果?

时间:2013-07-12 12:49:10

标签: php mysql apache

在将我的网站移动到新服务器时,发现了以下问题:来自mysql的'奇怪'字符(ê,ç,ã等)的渲染错误。

例如:

MySQL:Galo vai a final,apóscobrançasdepênaltis。

旧服务器(apache 2.2 / php 5.3): Galo vai决赛,apóscobrançasdepênaltis。 (正确)

新服务器(apache 2.4 / php 5.4): Galo vai决赛,apé³cobrançasdepênaltis。 (错)

我相信apache或php导致了这个问题,但我没有在任何地方找到关于它的文档。

有人可以帮我找到导致此错误的原因吗?

修改

这是渲染它的代码(请注意,它在两个服务器中都是相同的):

控制器:

//Noticias
$q = Doctrine_Query::create()
    ->select("id,titulo,thumb,conteudo")
    ->from('noticia')
    ->limit(10)
    ->where("data <= '$today'")
    ->andWhere("status = 1")
    ->andWhere("categoria_id = 1")
    ->orderby('data DESC');
$res = $q->fetchArray();
foreach($res as $key => $value){
    $res[$key]['titulo'] = stripslashes($res[$key]['titulo']);
    $res[$key]['conteudo'] = strip_tags($res[$key]['conteudo']);
    $res[$key]['conteudo'] = stripslashes($res[$key]['conteudo']);
    $res[$key]['conteudo'] = substr($res[$key]['conteudo'],0,150) . '...';
}
$smarty -> assign('noticias',$res);

查看:

<ul class="homelist">
    {foreach item=noticia from=$noticias name=news}
     <li> <a href="noticia/{$noticia.id}/{$noticia.titulo|slug}/"><img src="assets/images/noticias/{$noticia.thumb}" alt="" /></a> <a class="title" href="noticia/{$noticia.id}/{$noticia.titulo|slug}/">{$noticia.titulo}</a>
      <p>{$noticia.conteudo}</p>
      <a class="more" href="noticia/{$noticia.id}/{$noticia.titulo|slug}/">more</a> 
    </li>   
    {/foreach} 
    <li><p align="center"><a href="/noticias/1">Veja mais</a></p> </li>
  </ul>   

1 个答案:

答案 0 :(得分:0)

您必须手动将编码更改为“ISO-8859-1”。在5.4之前,默认编码为“UTF-8”。 使用此代码:

htmlspecialchars($string, ENT_COMPAT,'ISO-8859-1', true)