2017-02-20 1 views
5

Я прочитал много постов и пытались многие вещи,Поиск строки в файле на другом языке - PHP - UTF-8

У меня есть несколько файлов монстра в сервере игры я работаю, Игра - это корейская игра, поэтому многие кодовые слова в корейском стиле.

Я пытаюсь получить строку, которая начинается с *아이템, за которой следует строка, которую я хочу. Я установил default_encoding в UTF-8. я могу найти строку на основе других битов в нем, но я хочу, чтобы исключить, что *아이템 от моего выхода,

образец для кода:

ini_set("max_execution_time", 0); 
    $monsdbconn = sqlsrv_connect("INSTANCE\SQLEXPRESS", array("Database" => "MonsDB", "UID" => "BLAH", "PWD"=> "BLAH")); 
    $monsDir = realpath('C:/PT-Server/GameServer/Monster/'); 
    $monsters = new RecursiveDirectoryIterator($monsDir); 

if (@$monsdbconn) { 
    $clearit = "DELETE FROM monsdrops"; 
    if (sqlsrv_query($monsdbconn,$clearit)) { 
     foreach($monsters as $name => $object){ 
      $monstername = ""; 
      if (stripos($name, '.inf')){ 
       $monsterfile = file($name); 
       $items = array("WA*", "WP*", "DA*", "WC*"); 
       foreach ($monsterfile as $monster) { 
        if (strstr($monster, "Name")) { 
         //things to remove from the string. 
         $monstrip = array("*Name",'"'); 

         //Remove "" and *Name from the string 
         $monstername = str_replace($monstrip, "", $monster); 

         //Remove spaces from start and end of string to prevent 
         //Duplicate entries, Will not remove space from between words. 
         $monstername = trim($monstername," "); // Space 
         $monstername = trim($monstername," "); // Tab 
        } 
        // THIS IS THE POINT IM SEARCHING FOR ITEMS AT THE MOMENT, BUT I NEED IT TO FIND THE KOREAN CHAR SET 
        if (preg_match("/\D{2}\d{3}/", $monster)) { 

         $string = preg_split("/(\s)/", $monster); 
         foreach ($string as $line) { 
          if ((preg_match("/\D{2}\d{3}/", $line)) && ((stripos($line, "name\\") === false) || stripos($line, ".zhoon") === false)) { 
           $sqlinsert = "INSERT INTO monsdrops ([monstername],[monsterdrops]) VALUES ('$monstername', '$line')"; 
           $insert = sqlsrv_query($monsdbconn, $sqlinsert); 
           if ($insert) { 
            echo "Insert $monstername, $line Successful! <br />";  
           } else { 
            echo "<br />Insert Failed! <br />"; 
            print_r(sqlsrv_errors()); 
           } 
          } 
         } 
        }  
       } 

      } 
     } 
    } else { 
     echo "Unable To Clear DB"; 
    } 
} else { 
    echo "Unable to connect to DB"; 
} 
@sqlsrv_close($monsdbconn); 

однако он не может найти символы, Если я выбираю другую часть строки и повторяю ее, символы показывают (поскольку я устанавливаю default_encoding), но она не может найти ее, и ее больно, поскольку в списке есть много триггерных слов, которые я хочу найти в корейском.

Заранее спасибо.

пример файла будет:

*아이템 5000 ec101 db120 da120 dg120 

ec101 и т.д., что я пытаюсь воруют.

безуспешно пытались выполнить mb_stripos и попытались снова с кодом, представленным ниже, безрезультатно. он просто не находит текст, однако, если я установил его для поиска ec101, он будет, но я не могу гарантировать, что это будет в строке, поэтому я использовал preg_match, но это работает только для капель, это не будет работать для все другие биты информации, которую я пытаюсь найти из файлов

ответ

3

stripos() не совместим с несколькими мегабайтами. Вместо этого вы должны использовать mb_stripos(), который должен работать лучше для вас. Также обратите внимание, что вам нужно явно проверить ложный результат. Результат нуля также может быть интерпретирован как ложный.

$file = "c:\server\monster.inf"; 
$lines = file($file); 
foreach ($lines as $line) { 
    // convert to Unicode standard 
    $line = mb_convert_encoding($line, "UTF-8", "EUC-KR"); 
    if (mb_stripos($line, "*아이템") !== false) { 
     echo "$line\n"; 
    } 
} 
+0

пытался что, его не найти его:/ я вернулась теперь дома, так что я буду обновлять пост с полным кодом (но вырезать ненужные вещи) –

+0

обновляются сейчас, попробовал его и без звездочки в передней части корейских персонажей, это меня озадачило. Нужно ли мне избегать звездочки, если оно находится внутри кавычек? –

+0

Я только что протестировал этот код, и он отлично работает. Я бы предположил, что ваша проблема лежит в другом месте. Вы уверены, что этот текст является UTF-8, а не какой-то устаревшей кодировкой? – miken32