字符串和文件名之间的PHP字符编码

时间:2012-10-31 13:31:07

标签: php encoding utf-8 character-encoding

我有一个写得不好的html文件(从Windows程序导出,所以我无法控制它),我要解析。我正在使用正则表达式,我知道它不适合HTML但我知道结构不会改变所以它的工作正常。

数据如下所示:

http://pastebin.com/2dx1G271

起初,file_get_contents无效,但Firefox告诉我它被编码为UTF-16。所以我编码就像这样:

$shortlist_html = mb_convert_encoding(file_get_contents($this->html_loc), 'UTF-8', 'UTF-16');

然后我从td之间获取我想要的数据,但有时候数据有这样一个奇怪的字符(注意奇怪的我):

  

艾迪美臣·巴拉加

但是我还有一个目录,里面有我想要循环的图像,它们的名字是这样的:

  

Ademílson_Attributes.png

     

Ademílson_Stats.png

     

Ademílson_Profile.png

现在我想将名称与图像名称相匹配。我可以轻松地使用正则表达式获得名称,但是直接匹配不起作用。如果我var_dump我得到的字符串:

  

Ademlson

如果我utf-8编码然后var_dump它,它已经剥离了“í”

  

Ademlson

上述任何一项都不符合我的字符串。

我应该注意到,当我说匹配时,我实际上做的是一个例如:

$myarray = array('Ademílson'=>57);

$handle = opendir($image_dir);
while($filename = readdir($handle)) //$filename is Ademílson_ Attributes.png
{
     preg_match('/(.*?)_+/', $filename, $matches);

     $playername = $matches[1]; //$playername is Ademílson but appears as Adem�lson when using var_dump

     if(isset($myarray[$playername]))
     {
          //This never matches
     }

     foreach($myarray as $name => $id)
     {
          if($name == $playername)
          {
               //This never matches
          }
     }

     //Okay try and utf-8 it instead
     $playername = mb_convert_encoding($playername, 'utf-8', mb_detect_encoding($playername)); //This time a var_dump strips the "i" e.g. Ademlson

     if(isset($myarray[$playername]))
     {
          //This still never matches
     }

     foreach($myarray as $name => $id)
     {
          if($name == $playername)
          {
               //This still never matches
          }
     }
}

我希望我已经充分解释了这一点。基本上我想将从文件名中检索到的字符串与从文件内容中检索到的字符串匹配,当字符串包含异常字符时。

0 个答案:

没有答案