如何防止显示钻石问号符号,甚至使用mb_substr和utf-8

时间:2011-07-10 05:17:18

标签: php substr

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

Μήπως θα έπρεπε να � ...

我无法删除那个奇怪的问号。我所做的是获取编码的RSS源的内容 <?xml version="1.0" encoding="UTF-8"?>使用希腊语作为内容。

有什么方法可以解决这个问题吗?

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

3 个答案:

答案 0 :(得分:17)

这是答案

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

答案 1 :(得分:12)

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

如果您有权访问数据源,那么您可能需要检查数据库设置以确保其编码正确...如果没有,那么您将不得不找到使用php转换数据的方法。 ..不是一件容易的事......

也许:

mb_convert_encoding($string, "UTF-8");

答案 2 :(得分:0)

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

http://code.google.com/p/mbfunctions/

它们似乎提供了类似的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;
   }
}