Как мне остановить PHP DOMDocument :: saveHTMLFile от генерации шестнадцатеричных кодов или изменить остальную часть моего файла - PullRequest
1 голос
/ 10 июля 2020

Как мне остановить PHP DOMDocument :: saveHTMLFile от генерации шестнадцатеричных кодов, преобразовав этот

<a href="word word\word.html"></a>

в этот

<a href="word%20word%5Cword.html"></a>

Он также добавляет метатег и добавляет цитату отметки на моем идентификаторе и других атрибутах, которые в нем не нуждаются ..., но это актуальная проблема, поскольку он разрывает ссылки, которые перестают работать

Я загружаю файл html, добавляя заголовок из другого файла и сохраните его. Я сузил проблему только до DOMDocument :: saveHTMLFile

РЕДАКТИРОВАТЬ 1: На моем локальном сайте я получаю сообщение «Запрошенный URL-адрес не найден на этом сервере», хотя он отображается как mysite \ word word \ word. html в адресной строке. Если я go в адресную строку нажмите ввод, он снова работает. Если я скопирую вставить слово% 20word% 5Cword. html, оно преобразуется в адресной строке в слово word \ word. html, но выдает сообщение «Запрошенный URL не был найден на этом сервере». Если я снова нажму Enter в адресной строке, то все заработает. Ясно, что слово% 20word% 5Cword. html не работает ... а умный браузер - FF. U C оставляет его с шестнадцатеричными кодами, поэтому он никогда не может работать, Chrome также ...

EDIT 2: Еще более странно, проблема не в% 20, а только в% 5 c. .. что правда, это "\", а не "/", который исправляет браузер ... и на самом деле я полагаю, что не могу сузить проблему до saveHTMLFile, поскольку, когда я тестирую в браузере, шестнадцатеричный код, кажется, меняется обратно соответствующему персонажу, только это нарушает функциональность. Предположим, одно исправление состоит в том, чтобы изменить все «\» на «/», но я действительно не хочу, чтобы saveHTMLFile что-либо изменял, потому что он также входит в мои читаемые человеком html комментарии и вносит беспорядок, заменяя все на html сущности, это просто бессмысленно с точки зрения формата html. Конечно, последнее исправление - это go возврат к обычным файлам и манипуляциям со строками, но ради усилий до сих пор я хотел бы остановить saveHTMLFile, преобразующий мой html

EDIT 3: на сравнение файлов вручную, проверка Я понимаю, что это намного хуже ... несколько \" полностью исчезли, а другие - нет, а также , из моего

1 Ответ

0 голосов
/ 11 июля 2020

Обнаружен в Java библиотеке под названием Jsoup, которая обезглавливает часть моего текста и удаляет конечные теги, которых не должно быть. Есть по крайней мере еще две реализации Java DOM, которые я мог бы попробовать, но думаю, мне нужно вообще держаться подальше от реализаций DOM, я начинаю видеть здесь шаблон =]. Есть что-то в корне неправильное, когда программисты не могут реализовать базовый c синтаксический анализ текста в соответствии со спецификацией - кстати говоря, Jsoup не создает шестнадцатеричные коды ... просто говорит

Простое решение - манипуляции с файлами (Java ) - полностью избегайте проблемы и Keep It Simple Stupid:

File htmlTemplateFile = new File(testfilepath);
htmlString = FileUtils.readFileToString(htmlTemplateFile);
header = FileUtils.readFileToString(new File(headerfilepath));
Pattern pattern = Pattern.compile("<body(.*)>");
Matcher matcher = pattern.matcher(htmlString);
String match = null;
                if (matcher.find())
                    match = matcher.group();
                else {
                    System.out.println("no body in file: " + htmlFile);
                    continue;
                }
htmlString = htmlString.replaceFirst(pattern.toString(), match + header);
FileUtils.writeStringToFile(htmlTemplateFile, htmlString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...