繁体   English   中英

htmlspecialchars utf-8 返回空字符串

[英]htmlspecialchars utf-8 returns empty string

我正在做一个 .php RSS 生成器,但在尝试从我的数据库中获取数据时遇到了问题:

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

有些条目显示得很好,而其他条目则不会返回任何文本......知道什么可能是错误的吗?

这是所有的代码:

<?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>

这是一个返回空字符串的结果:

una vez en el colectivo(sentada en el asiento 个人) 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。 EP

您的代码使用htmlspecialchars($string, ENT_QUOTES, 'utf-8') 联机帮助页中引用

如果输入字符串在给定的编码中包含无效的代码单元序列,则将返回一个空字符串,除非设置了 ENT_IGNORE 或 ENT_SUBSTITUTE 标志。

使用例如htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8')作为快速解决方法。

如果无效输入确实是您的问题,当然,您应该找出为什么utf8_substr($row['texto'], 0, 100)不返回有效的 UTF-8 字符串。

这仍然没有解决,我最近找到了一个解决我遇到的类似问题的方法:异常字符会使函数打印一个空字符串。 因此,我打算发表我的意见。

在标志区域,添加“ | ENT_SUBSTITUTE ”并将编码类型更改为“cp1252”。 ENT_SUBSTITUTE标志将确保替换任何无法识别的字符,而不是创建一个空字符串。 然而,编码类型“cp1252”是特定于 Windows 的,如果它不起作用,我建议查看手册页上的其他类型( https://www.php.net/manual/en/function.htmlspecialchars.php ) . (我推测为什么这种编码对我有用是因为我的服务器在 Windows IIS 上运行)

编辑:您还可以选择删除 XML 文件中的编码类型,PHP 可以很好地使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM