Php 如何防止显示菱形问号符号,即使使用mb_substr和utf-8

Php 如何防止显示菱形问号符号,即使使用mb_substr和utf-8,php,substr,Php,Substr,我读了一些其他的问题,尝试了答案,但最后没有结果。我得到的是这个例子 Μήπως θα έπρεπε να � ... 我不能去掉那个奇怪的问号。我所做的是获取RSS提要的内容,该内容也被编码为 内容使用希腊语 有办法解决这个问题吗 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <div><?php $entry->description = strip_ta

我读了一些其他的问题,尝试了答案,但最后没有结果。我得到的是这个例子

Μήπως θα έπρεπε να � ...
我不能去掉那个奇怪的问号。我所做的是获取RSS提要的内容,该内容也被编码为
内容使用希腊语

有办法解决这个问题吗

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<div><?php
    $entry->description = strip_tags($entry->description);
    echo mb_substr($entry->description, 0, 490);
?> ...</div>

...

您是否尝试过使用这些看似冗余的多字节安全字符串函数,这些函数不在php核心中

似乎它们提供了一个mb_strip_tags()函数,如下所示:

if (! function_exists('mb_strip_tags'))
{
   function mb_strip_tags($document,$repl = ''){
      $search = array('@<script[^>]*?>.*?</script>@si',  // Strip out javascript
                     '@<[\/\!]*?[^<>]*?>@si',            // Strip out HTML tags
                     '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
                     '@<![\s\S]*?--[ \t\n\r]*>@'         // Strip multi-line comments including CDATA
      );
      $text = mb_preg_replace($search, $repl, $document);
      return $text;
   }
}
如果(!function_存在('mb_strip_tags'))
{
函数mb_strip_标记($document,$repl=''){
$search=array('@]*?>.@si',//去掉javascript
“@@si”,//去掉HTML标记
“@]*?>.*?@siU”,//条形样式标记正确
'@@'//带多行注释,包括CDATA
);
$text=mb_preg_replace($search、$repl、$document);
返回$text;
}
}

我认为问题在于您的编码。您正在输出UTF-8,但浏览器无法解释其中一个字符。过去我所知道的问号符号实际上是由浏览器生成的,因此不需要搜索和替换…它是关于在输出之前修复编码或从字符串中删除未知字符

如果您可以访问数据源,那么您可能需要检查数据库设置以确保其编码正确…如果没有,那么您必须找到某种方法使用php转换数据…这不是一项简单的任务

也许:

mb_convert_encoding($string, "UTF-8");
这就是答案

mb_substr($entry->description, 0, 490, "UTF-8");

什么是
$entry
?问题可能是用于存储描述文本的编码吗?我已经更新了我的问题。它所做的是,它得到一个提要的内容,“有趣的问号”是一个真实的角色,称为替换角色。它可能被添加到数据中,因为来自提要的流不是合法的UTF-8,也就是说,它无法被解码。你能像Abdullah建议的那样向我们展示字符串$entry的内容吗?可作为字节序列而不是字符序列执行?而且,您确定原始提要数据是用UTF-8编码的吗?如果您不使用
mb_substr
,您会得到相同的编码错误吗?当我在没有mb_substr的情况下回显它时,我不会得到问号。这是我使用的一个提要,因为我是初学者,我如何使用我必须下载到我的cPanel中的文件?只需从我提供的链接下载它,将它与其他php文件一起上传到服务器上,并使用include_once('mbfunctions-whatever.php')将其包含在内;好的,我做了,但是我得到的是内容被问号替换了。您的服务器上安装了多字节字符串吗+1看起来你用“UTF-8”的论点把OP的方向写对了,不知道为什么有人会投反对票。谢谢你,埃斯普拉德利。如果我能投票7000次,我会的。我从查塞特监狱逃了出来。这适用于在模板级别修复问题。