Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 21.08.2019
Сообщений: 13

Проблема с кодировкой

14.12.2024, 17:34. Показов 316. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день такой вопрос, наверное сложный, так как нейросетка не может решить.

Есть код который читает шаблон меню из html файла в кодировке UTF-8. Сам php скрипт тоже в UTF-8. Подставляет туда ссылки. Сохраняет в текстовую переменную, для вывода затем в шаблон страницы. Проблема в том, что текст на кирилице в шаблоне выводится каракулями (кодировка сбита). Сами подставленные ссылки выводятся нормально:

код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
function createGlobalGEOMenuModule ($input_global_geo_menu_links_arr, $input_template_path) {
    try {
        if (empty($input_global_geo_menu_links_arr)) {
            throw new InvalidArgumentException("Массив с ссылками для функции createGlobalGEOMenuModule пуст.");
        }
        if (!file_exists($input_template_path)) {
            throw new InvalidArgumentException("Файл шаблона Глобального GEO меню не найден");
        }
        $global_geo_menu_html_content = file_get_contents($input_template_path);
        $global_geo_menu_html_content = mb_convert_encoding($global_geo_menu_html_content, 'UTF-8', 'auto');
        if ($global_geo_menu_html_content === false) {
            throw new InvalidArgumentException("Не удалось прочитать файл с шаблоном Глобального GEO меню");
        }
        $links_arr_length = count($input_global_geo_menu_links_arr);
        $outer_global_geo_menu_module = "";
        if ($links_arr_length > 0) {
            $doc = new DomDocument('1.0', 'UTF-8');
            $doc->preserveWhiteSpace = false;
            $doc->formatOutput = true;
            $doc->loadHTML($global_geo_menu_html_content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NOERROR);
            $first_column = $doc->getElementById("first-column-global");
            $second_column = $doc->getElementById("second-column-global");
            $third_column = $doc->getElementById("third-column-global");
            if (!$first_column || !$second_column || !$third_column) {
                throw new InvalidArgumentException("Не удалось найти элементы с id столбцов для глобального GEO меню");
            }
            
            $column_max_size = ceil($links_arr_length / 3);
           
            $first_ul_element = $doc->createElement('ul');
            $first_column->appendChild($first_ul_element);
            $second_ul_element = $doc->createElement('ul');
            $second_column->appendChild($second_ul_element);
            $third_ul_element = $doc->createElement('ul');
            $third_column->appendChild($third_ul_element);
            
            $element_counter = 1;
            for ($i = 0; $i < $links_arr_length; $i++) {
                
                $imported_link_element = $doc->importNode($input_global_geo_menu_links_arr[$i], true);
                $new_li_element = $doc->createElement('li');
                $new_li_element->appendChild($imported_link_element);
                if ($element_counter <= $column_max_size) {
                    $first_ul_element->appendChild($new_li_element);
                } elseif ($element_counter <= $column_max_size * 2) {
                    $second_ul_element->appendChild($new_li_element);
                } else {
                    $third_ul_element->appendChild($new_li_element);
                }
                $element_counter++;
            }
            $outer_global_geo_menu_module = $doc->saveHTML($doc->documentElement);
        }
        return $outer_global_geo_menu_module;
    } catch (Exception $e) {
        error_log ("Ошибка формирования блока глобального GEO меню: " . $e->getMessage());
        throw new Exception("Ошибка формирования глобального GEO меню: " . $e->getMessage() . "<br>");
    }  
}
Добавлено через 2 минуты
сам код получения переменной с меню и вывода в страницу:
PHP
1
2
$new_global_geo_menu_output_module = createGlobalGEOMenuModule($global_geo_menu_links_arr, GLOBAL_GEO_MENU_MODULE_PATH);
include $html_template_path;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2024, 17:34
Ответы с готовыми решениями:

Проблема с кодировкой
Доброго времени суток! Появилась проблемка при кодировке php файлов. Дело вот в чём создаю файл в стандартной кодировке UTF-8 сохраняю,...

Проблема с кодировкой
не знаю где поменять шрифт

Проблема с кодировкой
Здравствуйте, у меня проблема с кодировкой. Если текст вводить на кириллице на страницах html или php, то все нормально выводит. Если...

3
Заблокирован
14.12.2024, 17:57
На странице есть <meta charset="UTF-8"> ?
Если на фронте Apache, то можно в файл .htaccess кодировку прописать.
0
0 / 0 / 0
Регистрация: 21.08.2019
Сообщений: 13
14.12.2024, 18:29  [ТС]
Есть и в php скрипте (header('Content-Type: text/html; charset=utf-8')
И в выводимом html файле
В файле шаблона нет, так как он подставляется в середину
И в .htaccess - (AddDefaultCharset UTF-8)

Я делал промежуточный вывод. проблема в строке:
PHP
1
2
$doc->loadHTML($global_geo_menu_html_content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NOERROR);
echo $doc->saveHTML($doc->documentElement);
так как тут уже криво вводится. Сам шаблон выводится нормально после чтения

Добавлено через 8 минут
есть
0
0 / 0 / 0
Регистрация: 21.08.2019
Сообщений: 13
15.12.2024, 01:00  [ТС]
вот решение, которое нашел:
PHP
1
2
3
$template_html = file_get_contents($input_template_path);
$template_html_correctly_encoded = mb_convert_encoding($template_html, 'HTML-ENTITIES', 'UTF-8');
$doc->loadHTML($template_html_correctly_encoded, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NOERROR);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2024, 01:00
Помогаю со студенческими работами здесь

Проблема с кодировкой
Вопрос наверно задавался 1000 раз. Но все таки. Пиши в dreamveawer. В свойствах нового документа задал кодировку UTF-8. У самого документа...

Проблема с кодировкой
Знаю, что таких тем уже миллион, но, к сожалению, ни 1 из них мне не подошла. К вопросу. Поставил денвер. Написал код добавления в...

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

Проблема с кодировкой phpMyAdmin
Изучаю phpMyAdmin работа с Бд и все такое. Я решил создать таблицу и одно поле вывести на экран с помощью .php на экран выводит(картинка в...

Проблема с кодировкой в массивах
Всем здравия! Рядовой php-шник, посему нуждаюсь в помощи. Такое дело, при попытке занести кириллицу в массив выводятся крякозябры....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru