php删除" questionmarks" from来自失败编码的文本

时间:2014-04-21 01:02:51

标签: php string encode

我正在使用file_get_contents从weblink中提取一些文本,我对文本没有影响,我所谈论的位已经在我获取内容的weblink的源代码中格式错误, 看起来......像这样:

 /$%§&fdsgfkgfd � fdsfdsfs � � -->
 <h1>m�lll</h1>
 <h1>m�lll</h1>
 <h1>m�lll</h1>
 <h1>m�lll</h1>
 <h1>m�lll</h1>
 <h1>m�lll</h1>

 <<<!-- � födns

我的php文件并不意味着“成为”一个html文件所以它只是一个字符串即时处理,

我搜索了互联网,但很难用这个图标

我想删除它们 因为没有必要, 我怎么能删除它们?

ps:我没有浏览浏览器,我在控制台中var_dump文本

解决方案:

我使用tthis函数首先将字符串转换为utf-8字符串

function convToUtf8($str) 
{ 
if( mb_detect_encoding($str,"UTF-8, ISO-8859-1, GBK")!="UTF-8" ) 
{ 

return  iconv("gbk","utf-8",$str); 

} 
else 
{ 
return $str; 
} 

} 

1 个答案:

答案 0 :(得分:1)

您可以使用iconv()

来丢弃编码不支持的字符
$converted = iconv($input_encoding, $output_encoding . '//IGNORE', $original);

有两个缺点:

  1. 您需要知道输入编码和
  2. 正如您在a user comment in the manual中所读到的那样,iconv()有一个错误,因此'//IGNORE'不适用于最新版本的iconv库。建议的解决方法是(此处为UTF-8):

    ini_set('mbstring.substitute_character', 'none'); 
    $text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');
    
  3. 但是,尝试检测输入编码并将输入转换为输出编码要好得多。这导致:

    function recode ($input, $output_encoding)
    {
      $input_encoding = mb_detect_encoding($input);
    
      if ($input_encoding === false)
      {
        $old_substitute = mb_substitute_character();
        mb_substitute_character('none'); 
    
        $converted = mb_convert_encoding($input, $output_encoding, $output_encoding);
    
        mb_substitute_character($old_substitute);
      }
      else
      {
        $converted = ($output_encoding !== $input_encoding)
          ? iconv($input_encoding, $output_encoding, $input)
          : $input;
      }
    
      return $converted;
    }