Использование PHP regex для перевода выходного буфера, но не в пределах HTML-тегов

У меня есть массив со строками для перевода ($translation), и я хочу использовать его для перевода выходного буфера. Однако он не должен заменять теги html. Я пытался использовать php DOM, но это слишком медленно и, вероятно, слишком сложно для того, что я хочу сделать.

В настоящее время я использую этот код, но это, конечно, также переводится между тегами.

$output = ob_get_clean();

foreach($translation as $original => $translated) {
    $output = str_replace($original,utf8_encode($translated),$output);
}

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

1 ответ

  1. помимо мнений об изначальной идее:

    я бы не использовал regexp для этого для производительности reasen. вы можете использовать strpos($html,'<')+ strpos($html,'>')в сочетании с substrдля извлечения строки по строке.

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

    Моя рекомендация:

    1. смотреть в gettext
    2. отфильтруйте строки, подобные упомянутым выше, и создайте a.mo-файл
    3. инкапсулируйте строки между тегами с помощью gettext-функций ( как здесь)