За последние 24 часа нас посетили 20382 программиста и 1087 роботов. Сейчас ищут 872 программиста ...

Конвертация Punycode в кириллицу

Тема в разделе "Сделайте за меня", создана пользователем kirpich, 19 дек 2019.

Метки:
  1. kirpich

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

    С нами с:
    27 дек 2015
    Сообщения:
    28
    Симпатии:
    3
    Всех приветствую.
    Мучаю листинг файлов на Apache.

    Кириллические символы преобразовываются в Punycode.
    Я вывел концовку URL в карту (breadcrumbs), концовка URL в листинге - это и есть название папки, которую сейчас просматриваешь. И если эта папка имеет кириллическое название, то и в URL будет кириллица. Соответственно, в карту выводится Punycode вместо нормального русского текста.

    PHP:
    1. <?php
    2. /* Получение полного URL */
    3. $urlfolder = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    4.  
    5. /* Конвертация Punycode в кириллицу */
    6. $вот тут не хватает кода :)
    7.  
    8. /* Вывод URL с обрезкой до последнего слеша */
    9. echo '<a href="' . $urlfolder . '" title="Ссылка на эту папку">' . basename($urlfolder) . '</a>';
    10. ?>
    Скрин для улучшения визуального восприятия прикрепил.
    Может кто-нибудь решал подобную проблему?

    php-root-folder.jpg
     
  2. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
  3. kirpich

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

    С нами с:
    27 дек 2015
    Сообщения:
    28
    Симпатии:
    3
    @Roman __construct, нет, это не то. Это доменные имена типа ://xn--80a4ad.domen на кириллицу. А мне нужно менять URI Path. И у меня Punycode не вида xn--80a4ad, а %d0%90%d1%83%d0%b4%d0%b8%d0%be (что соответствует слову Аудио).
    На скриншоте стрелками красными выделил. Беда :(
     
  4. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    это вообще не пуникод )) ты чего людей запутываешь?)))))))

    это обычное урл-кодирование

    лови:

    https://www.php.net/manual/ru/function.urldecode.php

    :)
     
    kirpich нравится это.
  5. kirpich

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

    С нами с:
    27 дек 2015
    Сообщения:
    28
    Симпатии:
    3
    Roman __construct нравится это.
  6. kirpich

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

    С нами с:
    27 дек 2015
    Сообщения:
    28
    Симпатии:
    3
    @Roman __construct, я так полагаю, что вот правильный вариант:

    PHP:
    1. <?php
    2. /* Получение полного URL с декодированием в кириллицу */
    3. $urlfolder = urldecode(((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    4.  
    5. /* Вывод корневой папки */
    6. if ($_SERVER['REQUEST_URI'] == '/') {
    7.     echo '<a href="' . $urlfolder . '" title="Ссылка на эту папку">' . '|••|' . '</a>';
    8. }
    9.  
    10. /* Вывод URL с обрезкой до последнего слеша */
    11. else {
    12.     echo '<a href="' . $urlfolder . '" title="Ссылка на эту папку">' . basename($urlfolder) . '</a>';
    13. }
    14. ?>
    Или где-то лучше что-то подправить?
     
  7. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Даже вникать не буду)))

    Если работает - значит все норм))

    Удачи!)
     
    kirpich нравится это.
  8. kirpich

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

    С нами с:
    27 дек 2015
    Сообщения:
    28
    Симпатии:
    3
    Roman __construct нравится это.
  9. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    ...я таки посмотрел ))

    смотри:

    - не рекомендуется использовать параметры из GET-запроса таким образом.

    потому что умельцы могут тебе сюда:

    PHP:
    1. $_SERVER['REQUEST_URI']
    много чего понапихать ))) в том числе js-код, используя всякие незакрытые кавычки и т.п.

    в общем, это потенциальная уязвимость.

    более правильно в таких случаях иметь массив с данными

    PHP:
    1. $dirs = ['dir1','dir2','dir3']
    а потом в качестве параметра передавать индекс этого массива

    HTML:
    1. ?dir=2
    и формировать ссылку исходя из него, примерно так:

    PHP:
    1. $dirs[$_GET['dir']]
    это такая общая рекомендация )
     
  10. kirpich

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

    С нами с:
    27 дек 2015
    Сообщения:
    28
    Симпатии:
    3
    @Roman __construct, я с php неделю, но что можно напихать через $_SERVER['REQUEST_URI'], если нет баз? Это просто показ директорий и файлов через mod_autoindex в апаче
     
  11. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Не знаю как теперь, но раньше если удавалось запустить через такую дыру джаваскрипт - то как минимум можно было стырить куки)) в т.ч. и админские)) я самолично так на форумах развлекался))
     
  12. kirpich

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

    С нами с:
    27 дек 2015
    Сообщения:
    28
    Симпатии:
    3
    @Roman __construct, куков тоже нет, это же просто листинг файлов. Но мысль я понял