Разделить и повторить отдельные китайские символы в PHP

Я беру китайские иероглифы из файла .csv и вывожу их в HTML через PHP, испытывая большие трудности с получением их непосредственно из .csv. Я копирую и вставляю в .txt, и мне стало легче работать с данными, мой hanzi_characters.txt имеет несколько сотен строк в этом примере:

hanzi_characters.txt

产品

產品

囚徒困境

不正当竞争

Что мне нужно, и я не могу понять, как это сделать правильно, - это показать один ханзи в каждой строке, например:

Я пытался использовать циклы foreach с str_split() и взорвать(), поскольку они считаются строкой, но выводит только ������.

Прежде чем исчерпать идеи, я также пробовал с array_chunk() и array_slice(), но, как и ожидалось, результат был таким же, как и без использования этих методов.

Я также попробовал это решение, назначив $s = parts[0];, но не смог заставить его работать ни один

Сейчас это мой код:

Index.php

<?php

$myfile = fopen("hanzi_characters.txt", "r") or die("Unable to open file!");

while (!feof($myfile)) {
    $printed = fgets($myfile);
    $parts = preg_split('/[\\s,]/u', $printed);
    $echo parts[0];
}
fclose($myfile);

?>

Текущий вывод:

产品

產品

囚徒困境

不正当竞争


person gma992    schedule 24.07.2015    source источник


Ответы (2)


Многобайтовые строковые функции PHP

Вам нужны многобайтовые строковые функции в PHP, а именно mb_ereg_replace.

Я думаю, что фактическое утверждение, которое вы хотите, выглядит примерно так:

 mb_ereg_replace ("~\s+~", '<br\>', $string);

Проверьте набор символов PHP

Чтобы использовать mb_ereg_replace, набор символов строки, которую вы читаете из файла, должен быть таким же, как набор символов, который использует PHP. Если вы прочитаете свой файл и выведете его, завернутый в тег <pre>, отобразит ли он файл с правильными символами? Если нет, кодировка файла, вероятно, отличается от кодировки, используемой PHP.

Вы можете ознакомиться с этим руководством убедившись, что вы используете utf8 или аналогичную кодировку. Как только это будет сделано, и вы узнаете кодировку файла, вы можете использовать mb_convert_encoding (обязательно используйте HTML-ENTITIES, если он отправляется в браузер), чтобы преобразовать строку, которую вы читаете, в набор символов, который вы используете в PHP.

person MirroredFate    schedule 24.07.2015
comment
Спасибо за подсказку, я изучу эти функции, но пока мне не повезло с mb_ereg_replace, символы правильно utf8 закодированы, отлично отображаются с <pre> тегами - person gma992; 25.07.2015

Я думаю, вы можете использовать массив строк php здесь. Запустите цикл foreach, чтобы перебрать все строки, а затем используйте php string-array.

foreach() //run for each line
{
    $q = "不正当竞争"; 
    for($i=0; $i <= strlen($q) - 1; $i++)
    {
        echo $q[$i] . "<br>";
    }
}
person Akshay    schedule 24.07.2015
comment
Это решение не будет работать, так как у меня нет строки hanzi, такой как $q, это один из первых подходов, которые я использовал. Является ли массив, каждый ключ массива имеет строку из нескольких китайских символов, которую я не могу правильно разделить на подстроки. - person gma992; 25.07.2015
comment
@gma992 gma992 Можете ли вы вставить «var_dump» массива? - person Akshay; 25.07.2015