За последние 24 часа нас посетили 18046 программистов и 1628 роботов. Сейчас ищут 1759 программистов ...

PHP8 xdebug3 var_dump windows-1251 - не работает

Тема в разделе "Прочие вопросы по PHP", создана пользователем axdr, 23 янв 2025.

Метки:
  1. axdr

    axdr Активный пользователь

    С нами с:
    7 дек 2012
    Сообщения:
    24
    Симпатии:
    0
    В такой комбинации var_dump выводит не все русские символы. Кто-нибудь сталкивался? В чем причина?

    Раньше в PHP7 такой проблемы не было. Как только установил PHP8, сразу появилась.
    У меня операционная система - Windows 10. Web-сервер Apache 2.4
    Скрипт в кодировке Windows-1251

    Код (Text):
    1.       header('Content-Type:text/html;charset=Windows-1251');
    2.       $s = 'мнопрсту';
    3.       echo $s;
    4.       var_dump($s);
    Выводит
    Код (Text):
    1.       мнопрсту
    2.       D:\web\test_00.php:6:string 'мноп' (length=8)
    Т.е. echo выводит строку правильно. var_dump не выводит символы, код которых > F0, хотя длину строки показывает верно.

    Пробовал
    Код (Text):
    1.       mb_internal_encoding('Windows-1251');
    2.       setlocale(LC_ALL, 'rus');
    3.       ini_set('default_charset', 'Windows-1251');
    Не помогает.
    Если отключить расширение xdebug, то var_dump работает правильно
     
    #1 axdr, 23 янв 2025
    Последнее редактирование: 23 янв 2025
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    Скрипт на PHP должен быть в кодировке UTF-8 без BOM.
     
  3. axdr

    axdr Активный пользователь

    С нами с:
    7 дек 2012
    Сообщения:
    24
    Симпатии:
    0
    Переделал скрипт. Теперь он должен быть в кодировке UTF-8
    Код (Text):
    1.       $encoding = 'Windows-1251';
    2.       header('Content-Type:text/html;charset='.$encoding);
    3.  
    4.       $s = 'карта';
    5.       $se = iconv('UTF-8', $encoding, $s);
    6.       echo $se, '<br>';
    7.       var_dump($se);
    8.       echo '<br><br>';
    9.  
    10.       $s = 'мнопрсту';
    11.       $se = iconv('UTF-8', $encoding, $s);
    12.       echo $se, '<br>';
    13.       var_dump($se);
    14.       echo '<br><br>';
    15.  
    16.       $s = 'абвгдежзийклмнопрстуфхцчшщъыьэюя';
    17.       $se = iconv('UTF-8', $encoding, $s);
    18.       echo $se, '<br>';
    19.       var_dump($se);
    20.       echo '<br><br>';
    21.  
    22.       $s = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
    23.       $se = iconv('UTF-8', $encoding, $s);
    24.       echo $se, '<br>';
    25.       var_dump($se);
    26.       echo '<br><br>';
    Вывод такой:
    [​IMG]



    --- Добавлено ---
    Пожалуйста! Если есть человек, готовый помочь, буду рад.
    Нужно запустить скрипт в другой OS (не в Windows). Желательно Linux.
    Обязательные условия: PHP8 с расширением xdebug
    Если у Вас есть рабочие Linux, PHP8 с xdebug, просто запустить скрипт и опубликовать результат здесь в теме.
    Требуется убедиться, виноват ли в этом Windows. Потом буду копать дальше.
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    Ты не переделал на UTF-8 без BOM.