За последние 24 часа нас посетили 58063 программиста и 1841 робот. Сейчас ищут 955 программистов ...

Hex Win(cp1251) код в символьную кирилицу.

Тема в разделе "PHP для новичков", создана пользователем Iced, 3 фев 2008.

  1. Iced

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

    С нами с:
    3 фев 2008
    Сообщения:
    6
    Симпатии:
    0
    PHP:
    1. <?php
    2. function save($row){
    3. $filename ="play.txt";
    4. if (!$handle = fopen($filename, 'w')) {
    5. print "Cannot open file ($filename)";
    6. }
    7. if (!fwrite($handle, $row)) {
    8. print "Cannot write to file ($filename)";
    9. }
    10. fclose($handle);
    11. }
    12.  
    13. $row = $_POST["Song"][0]["Artist"]."\n";
    14. $row.= $_POST["Song"][0]["Title"];
    15. $row .="\n".$_POST["Playing"];
    16. save($row);
    17. ?>
    Этот скрипт получает из проигрывателя часть ID3v2 тэга (автор\название) и сохраняет его в текстовый файл.
    Тэги на английском сохраняются без проблем в виде:
    Русские тэги сохраняются в виде:
    Как я понял - это шестнадцатиричный код русских букв в кодировке Win(cp1251).
    Мне нужно, чтобы в тектовый документ сохранялись и русские, и английские тэги в нормальном виде.

    Подскажите пожалуйста в чём проблема и как исправить ?
    PS: Я нечасто имею дело с php, но мне показалось, что в скрипте не хватает элемента типа "если hex то перекодировка в текст".
     
  2. Iced

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

    С нами с:
    3 фев 2008
    Сообщения:
    6
    Симпатии:
    0
    Я использовал эту функцию:
    PHP:
    1.   function utf8_urldecode($str) {
    2.     $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));
    3.     return html_entity_decode($str,null,'UTF-8');;
    4.   }
    и поставил обработку на нужные строки. Теперь код выглядит так:
    PHP:
    1. <?php
    2.  
    3. function save($row){
    4. $filename ="play.txt";
    5. if (!$handle = fopen($filename, 'w')) {
    6. print "Cannot open file ($filename)";
    7. }
    8. if (!fwrite($handle, $row)) {
    9. print "Cannot write to file ($filename)";
    10. }
    11. fclose($handle);
    12. }
    13.  
    14.   function utf8_urldecode($str) {
    15.     $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));
    16.     return html_entity_decode($str,null,'UTF-8');;
    17.   }
    18.  
    19. $row = utf8_urldecode($_POST["Song"][0]["Artist"]."\n");
    20. $row.= utf8_urldecode($_POST["Song"][0]["Title"]);
    21. $row .="\n".$_POST["Playing"];
    22.  
    23. save($row);
    24. ?>
    Всё получилось. Спасибо.
     
  3. ViT

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

    С нами с:
    13 мар 2006
    Сообщения:
    11
    Симпатии:
    0
    Проблема такого же плана, но я читаю ID3v2 прямо из файла.
    С англ строками всё ок, а вот русские получаются типа ";865" (притом пробовал разные скрипты, которые есть в нете - результат одинаков)
    Пробовал конвертировать строку в другую кодировку через iconv, но что-то всё равно ничё не меняется.
    Процедура выше тоже не помогла. НЕ подскажите чё делать? :(