解析したい不完全に書かれたhtmlのファイル(Windowsプログラムからエクスポートされたので、私はそれを制御できません)があります。HTMLには適していないことがわかっている正規表現を使用していますが、構造が変わらないことはわかっているので、問題なく動作します。
データは次のようになります。
最初は 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
Ademilson_ Stats.png
Ademilson_ 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
}
}
}
私はそれを十分に説明したことを願っています。基本的に、文字列に異常な文字が含まれている場合、ファイル名から取得した文字列をファイルの内容から取得した文字列と一致させたいと考えています。