CHtml::encode error de htmlspecialchars

Saludos :

En mi aplicación los comentarios con más de 600 caracteres se muestran parcialmente, si el usuario quiere ver más pulsa un boton ajax que muestra el resto del contenido.

Mi problema es que se produce un error al mostrar el contenido cortado :




<?php 

if($cortar){

	$comentario=substr($comentario,0,600);

 	echo nl2br(CHtml::encode($comentario));

}else{

 	echo nl2br(CHtml::encode($comentario)); 

}?>



Por lo que he podido averiguar, CHtml::encode usa htmlspecialchars pero el contenido de este debe venir en UTF8 y parece que lo que le estoy pasando no está bien codificado, ya que este código muestra lo que quiero pero mal codificado :




<?php 

if($cortar){

	$comentario=substr($comentario,0,600);

 	echo nl2br(CHtml::encode(utf8_encode($comentario)));

}else{

 	echo nl2br(CHtml::encode($comentario)); 

}?>



Podeís ver este comportamiento en los comentario de :

http://www.ciudadredonda.org/lectura/comentario/?f=2010-04-22

El problema es que no ocurre siempre, aquí podeís ver que funciona correctemente sin el ut8_encode:

http://www.ciudadredonda.org/lectura/comentario

Muchas Gracias

Yo no uso el CHtml::encode… utilizo el htmlentities de PHP…

Sino antes utiliza el utf8_encode pero también fijate que la conexión a la BD este en UTF8 y que las tablas de la BD esten en utf8…

Como seguramente vas a querer buscar en la base el utf8 que te combiene usar es el utf8_unicode_ci

Saludos,

De momento he quitado el CHtml::encode y me lo muestra sin problema, tengo que hacer una migración de la base de datos, ya que el campo en cuestión está en latin1_swedish_ci aunque tengo toda la aplicación en UTF-8.