htmlspecialchars utf-8 renvoie une chaîne vide
Je suis en train de faire un .php générateur de flux RSS et j'ai un problème en essayant d'obtenir des données de ma base de données dans cette ligne:
<description><![CDATA[<?=htmlspecialchars(utf8_substr($row['texto'], 0, 100), ENT_QUOTES, 'utf-8') ?>...]]></description>
Certaines données montrent très bien, et d'autres, l'habitude de retourner n'importe quel texte... une idée sur ce qui pourrait être mauvais?
C'est tout le code:
<?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>
C'est un résultat qui renvoie une chaîne vide:
una vez en el colectivo (sentada en el asiento personne) me dormí y cuando doblo moi caí en el pasillo re mal! se mataron de la risa todos!! hasta el colectivero! Pasalo y comento con mi Facebook. E. P.
- Donner un exemple de certains qui se traduit par le remboursement d'une chaîne vide.
- Comment est
utf8_substr
défini? - J'ai mis à jour le post avec tout le code et un résultat... c'est Peut-être parce que les caractères accentués? "dormí". Est espagnol...
Vous devez vous connecter pour publier un commentaire.
Votre code utilise
htmlspecialchars($string, ENT_QUOTES, 'utf-8')
. Citant le page de manuelUtiliser, par exemple,
htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8')
comme une solution de rechange rapide.Si l'entrée non valide est en fait votre problème, bien sûr, vous devez savoir pourquoi
utf8_substr($row['texto'], 0, 100)
ne retourne pas valide chaîne UTF-8 dans la première place.ENT_QUOTES
maisENT_COMPAT
. (2) Ce que le doc a dit à propos deENT_IGNORE
: "ignorer Silencieusement code non valide unité de séquences au lieu de renvoyer une chaîne vide. L'utilisation de cette option n'est pas recommandée, car elle » peut avoir des répercussions sur la sécurité." (3)ENT_SUBSTITURE
est disponible uniquement à partir de PHP 5.4.0ENT_IGNORE
que cela a des répercussions sur la sécurité, par la documentation.