Ответы пользователя по тегу XML
  • Как заменить двойные кавычки на "?

    erge
    @erge
    Примус починяю
    Нужно сначала разбить текст на группы attribute_name="attribute_value" затем для этих групп вызвать замену и это можно сделать при помощи preg_replace_callback

    регулярка для поиска ([^= ]+)="(.*?)"\s+(?=([^= ]+=|\/>))
    см. RegEx101

    используем ее в preg_replace_callback, находим пары атрибут=значение и заменяем , делая подмену символов в значении через htmlspecialchars

    $str = '
    <order acode="7102774" ProductName="Какой-то текст "с скобочками", которые нужно заменть" ClientBarCode="" />
       <order acode="7102774" ProductName="Какой-то текст "с скобочками", которые нужно заменть" ClientBarCode="" />
     <order acode="7102774" ProductName="Какой-то текст "с скобочками", которые нужно заменть" ClientBarCode="" />
          <order acode="7102774" ProductName="Какой-то текст "с скобочками", которые нужно заменть" ClientBarCode="" />';
    
    $out = preg_replace_callback(
        '/([^= ]+)="(.*?)"\s+(?=([^= ]+=|\/>))/',
        function($m) {
            return $m[1].'="'.htmlspecialchars($m[2], ENT_QUOTES).'" ';
        },
        $str);
        
    echo $out;


    см. пример
    Ответ написан
    Комментировать
  • Как декодировать текст из unicode в xml файле?

    erge
    @erge
    Примус починяю
    Dunno2018,
    • вставляйте тексты - текстом, а не картинками, тут есть специальные тэги
    • декодировать естестсвенно можно!


    Кириллица и не должна отображаться, это НЕ UTF-8, это Unicode, как бы это разные вещи.

    вопрос каким средствами вы располагаете??
    от этого зависит каким образом декодировать!


    т.к. исходных данных нет, то, как пример - онлайн декодировщик:
    https://unicode-table.com/ru/tools/decoder/

    для того чтобы текст привести в нормальный вид и декодировать необходимо заменить все
    ;&#x на \u0 и &#x на \u0

    полученный текст подставляете в декодер.

    UPD:
    Вот пример декодирования первой строки на Python
    a = u'\u041a\u0432\u0430\u0440\u0442\u0438\u0440\u044b \u043D\u0430'
    print a.encode('UTF-8')

    результат:
    Квартиры на

    UPD2:
    Написал однострочный перекодировщик на bash + python
    Перекодировка текста в xml из unicode в utf-8
    cat /tmp/1.xml | sed 's/\&#x\([^;]\{1\}\)\([^;]\{2\}\);*/\\u0\1\2/g' | python3 -c "import sys; s = sys.stdin.read(); print (s.encode('UTF-8').decode('unicode-escape'))" > /tmp/2.xml


    PS: вроде работает :)
    Ответ написан
    Комментировать