0

我有一个我想解析的写得很糟糕的 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 之间获取我想要的数据,但有时数据有一个像这样的奇怪字符(注意奇怪的 i):

阿德米尔森

但是,我也有一个充满图像的目录,我想循环访问它们,它们的名称如下:

Ademílson_ Attributes.png

Ademílson_ Stats.png

Ademílson_ Profile.png

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

阿德梅尔森

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

阿德姆森

以上都不匹配我的字符串。

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

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

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

4

0 回答 0