Как предотвратить отображение символа вопросительного знака с ромбом, даже используя mb_substr и utf-8 - PullRequest
7 голосов
/ 10 июля 2011

Я прочитал несколько других вопросов, попробовал ответы, но в конце не получил результата.Я получаю, например,

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

, и я не могу удалить этот странный знак вопроса.Что я делаю, чтобы получить содержимое 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 ]

17 голосов
/ 11 июля 2011

Это ответ

mb_substr($entry->description, 0, 490, "UTF-8");
12 голосов
/ 10 июля 2011

Я считаю, что проблема в вашей кодировке. Ваш вывод UTF-8, но ваш браузер не может интерпретировать один из символов. Символ знака вопроса, каким я его знал в прошлом, на самом деле генерируется браузером, поэтому поиск и замена не производятся ... речь идет об исправлении вашей кодировки ИЛИ об удалении неизвестных символов из строки перед ее выводом ...

Если у вас есть доступ к источнику данных, то вы можете проверить настройки БД, чтобы убедиться, что они правильно закодированы ... если нет, то вам нужно будет найти способ конвертировать данные, используя php. ... не простая задача ...

Возможно:

mb_convert_encoding($string, "UTF-8");
0 голосов
/ 10 июля 2011

Вы пытались использовать эти, казалось бы, избыточные многобайтовые безопасные строковые функции, которых нет в ядре 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;
   }
}
...