utf 8 — Поиск строки в файле на другом языке — 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, но это работает только для отбрасываний, это не будет работать для всех других битов информации, которые я пытаюсь найти из файлов

5

Решение

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";
}
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector