Estoy haciendo una .php RSS generator y tengo un problema tratando de obtener los datos de mi base de datos en esta línea:

<description><![CDATA[<?=htmlspecialchars(utf8_substr($row['texto'], 0, 100), ENT_QUOTES, 'utf-8') ?>...]]></description>

Algunas entradas se muestran igual de bien, y a otros no devolver cualquier texto… Alguna idea sobre lo que podría estar equivocado?

Este es todo el código:

<?php

require('php/config.php');
require('php/db.php');
require('php/utils.php');

header("Content-type: application/xml");

$db = new TSQL('SELECT * FROM entradas WHERE estado = 1 ORDER BY fecha DESC LIMIT 20');
if ( $db->executeQuery() ) {

?><?='<?xml version="1.0" encoding="utf-8" ?>' ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Tu Secreto</title>
        <link>http://www.tusecreto.com.ar/</link>
        <description>TuSecreto /No se lo cuentes a nadie, contaselo a todos</description>
        <language>es-ar</language>
        <copyright>TuSecreto (C) 2005-<?php print strftime("%Y", time()); ?></copyright>
        <lastBuildDate><?=strftime("%a, %d %b %Y %H:%M:%S ", $row['fecha']) ?></lastBuildDate>
        <atom:link href="http://www.tusecreto.com.ar/rss.php" rel="self" type="application/rss+xml" />
        <docs>http://www.tusecreto.com.ar/rss.php</docs>
        <generator>TuSecreto RSS Generator v1.0</generator>
        <ttl>10</ttl>
        <? while ($row = $db->getRow(MYSQL_ASSOC)) { ?>
        <item>
            <title><?=($row['sexo'] == MUJER)?'Mujer':'Hombre' ?> | <?=$row['edad'] ?> <?="A\xC3\xB1os" ?></title>
            <description><![CDATA[<?=htmlspecialchars(utf8_substr($row['texto'], 0, 100), ENT_QUOTES, 'utf-8') ?>...]]></description>
            <link>http://www.tusecreto.com.ar/<?=$row['id'] ?></link>
            <guid isPermaLink="true">http://www.tusecreto.com.ar/<?=$row['id'] ?></guid>
            <pubDate><?=strftime("%a, %d %b %Y %H:%M:%S ", $row['fecha']) ?></pubDate>
        </item>
        <?php } ?>
    </channel>
</rss>

Este es uno de los resultados que devuelve una cadena vacía:

una vez en el colectivo (sentada en el asiento individual), me dormí y cuando doblo me caí en el pasillo re mal! se mataron de la risa todos!! hasta el colectivero! Pasalo y comento con mi Facebook. E. P.

  • Dar un ejemplo de algunos de los que están dando lugar a la devolución de una cadena vacía.
  • ¿Cómo se utf8_substr definido?
  • He actualizado el post con todos los códigos y uno de los resultados… tal vez es porque los caracteres acentuados? «dormí». Es el español…
InformationsquelleAutor Santiago | 2012-06-18

1 Comentario

  1. 15

    Utiliza el código htmlspecialchars($string, ENT_QUOTES, 'utf-8'). Citando de la manual

    Si la cadena de entrada contiene un código incorrecto de la unidad de secuencia dentro de la
    la codificación dada una cadena vacía será devuelto, a menos que la
    ENT_IGNORE o ENT_SUBSTITUTE se establecen indicadores.

    Use, por ejemplo, htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8') como una rápida solución.

    Si de entrada no válido es su problema, por supuesto, usted debe averiguar por qué utf8_substr($row['texto'], 0, 100) no volver válido cadena UTF-8 en el primer lugar.

    • (1) El valor predeterminado no es ENT_QUOTES pero ENT_COMPAT. (2) Lo que el doc dice acerca de ENT_IGNORE: «Silencio desprenderse de código no válido unidad de secuencias en lugar de devolver una cadena vacía. El uso de este indicador es desanimado, ya que » puede tener implicaciones de seguridad.» (3) ENT_SUBSTITURE sólo está disponible a partir de PHP 5.4.0
    • Definitivamente no ignorar este error con ENT_IGNORE ya que esto tiene implicaciones para la seguridad, por la documentación.

Dejar respuesta

Please enter your comment!
Please enter your name here