Изменение/Редактирование тегов с помощью PHP


Это мой первый вопрос здесь, поэтому, пожалуйста, потерпите меня - я приношу извинения, если я неправильно разместил сообщение.

Мне удалось извлечь описание работы из XML-файла, созданного нашей базой данных, однако программное обеспечение базы данных очень старое и преобразует определенные символы.

Моя проблема заключается в следующем: Маркированные точки преобразуются примерно в следующее:

"   Production of Monthly Management Accounts and variance analysis<BR>

Таким образом, "(кавычка) вводится там, где должна быть точка, и вводится <BR> для начала новая линия.

Мне было интересно, знает ли кто-нибудь, как преобразовать кавычки и <BR> в <li> и </li> соответственно. Я рассматривал несколько вариантов, таких как preg_match и substr_replace, однако ни один из них не дал желаемых результатов.

Очевидно, что текст между <li> и </li> будет меняться в зависимости от работы и т.д.

В довершение всего, как только это заработает, мне нужно будет добавить <ul> и </ul> вокруг элементов списка, но я предполагаю, что могу искать первый экземпляр <li> и заменить на <ul><li>, а также последний экземпляр </li> и заменить на </li></ul>.

Прошу прощения за болтовню, надеюсь, я ясно выразился.

Редактировать: Большое спасибо за все быстрые ответы, я собираюсь дать им удар завтра. Я застрял на этом большую часть дня, так что думаю, что пришло время отойти.

Просто чтобы дать немного дополнительной информации, если это поможет...

Программному обеспечению базы данных около 12 лет и поддержка для этого довольно ограничена. Если мы хотим что-то сделать, это, как правило, стоит больших денег. У него есть несколько вариантов экспорта данных, однако XML по какой-то причине сохранил форматирование HTML, поэтому я пошел по этому маршруту.

Все задания были сначала написаны в Word, а затем вставлены в "поле задания" в базе данных, поэтому существует большая вероятность того, что код был неверно истолкован.

Я выполнил тестовую работу и убедился, что использовал маркеры в Word и скопировал их в "поле работы" кавычки появились там, где должны быть точки, поэтому я предполагаю, что старое программное обеспечение не "понимает" маркированные пункты.

Я попробую все ваши замечательные ответы и отчитаюсь завтра!

Спасибо!

РЕДАКТИРОВАТЬ 2

Привет, ниже я вставил фактический вывод из представления источника. Я попробовал опцию preg_replace ниже, которая работает в одной строке, но, как вы можете видеть, вывод раздражающе размещает все непрерывно без разрывов строк.

An exciting opportunity has arisen to join an established company based in Luton for a high calibre Management Accountant. Reporting to the Finance Director, the Management Accountant will provide accurate and reliable management information and financial support to the business. <BR>Key Responsibilities:<BR>" Production of Monthly Management Accounts and variance analysis<BR>"    Preparation of Management Reports for Management Meetings.<BR>" Production of Monthly Forecasts and Annual Budgets using Excel.<BR>"    Decision support to the business<BR>"   Attending and presenting at meetings with business managers<BR>"    Assisting external auditors with their audit process at each year end<BR>"  Ad-hoc project work<BR>Experience:<BR>" Qualified accountant (ACA or CIMA) <BR>"    Strong communication skills - to communicate effectively with all levels of management<BR>" High level of personal motivation, focus and a commitment to quality<BR>"   Ability to adapt to the demands of a constantly changing business<BR>"  Ability to interact with people at all levels in a sensitive and effective way<BR>If you are interested in this role then please apply now.<BR>
Author: Nick D, 2011-03-30

3 answers

Предположения:

  • " начинается строка (кавычка, за которой следуют 3 пробела, уценка удаляет пробелы)
  • <BR> находится в самом конце строки
  • Не будет никаких других вариантов, ни разделенных строк

Регулярное выражение:

/^"   (.*)<BR>$/

PHP:

$replacedData = preg_replace( '/^"   (.*)<BR>$/', '<li>\1</li>', $data );

Поскольку вы сказали, что все содержимое собрано в кучу, вы можете попробовать следующее регулярное выражение:

/"   (.*?)<BR>/

Хотя вас следует предупредить, что он может выбрать неправильную цитату, если строки произойдут содержать текст "в кавычках".

В качестве альтернативы, если вы знаете, что строки заканчиваются как <BR>" (3 пробела удаляются из-за уценки), вы можете использовать 3 замены, чтобы получить желаемый эффект:

$repData = preg_replace(
             array( '/<BR>"   /', '<BR>', '"   ' ),
             array( '</li><li>', '</li></ul>', '<ul><li>' ),
             $data );

Опять же, это может привести к неправильным элементам, особенно если <BR> существует в другом месте кода.

 2
Author: zzzzBov, 2011-03-31 15:18:10

Первым комментарием будет исправление поврежденной базы данных.

Кроме того, почему существует форматирование в XML-файле или в базе данных, если на то пошло? Если это XML-файл, просто удалите из элемента все, кроме фактического текста описания работы, и пусть ваш PHP-скрипт выведет его красиво. Учитывая приведенный выше пример, обрежьте
с конца, затем запустите его через trim('"'), чтобы очистить все заключающие кавычки и пробелы.

Или это один из таких случаев где вы получаете XML из базы данных, и тот, кто написал эту часть, явно не понимал, для чего нужен XML?

Редактировать: Ааа. Это просто поразило меня. Может быть, вы имеете в виду, что описание работы представляет собой обычный текстовый двоичный объект, с тем, что должно быть подпунктами, на самом деле все застряло там, отформатировано так, как вы продемонстрировали. Если это так, то вам будет действительно трудно получить это точно, потому что вероятность того, что (при работе с неструктурированными данными) есть некоторые отклонения в форматировании. Я думаю, что лучше всего было бы использовать регулярное выражение, чтобы извлечь весь текст между тегами "и BR, создать массив из этого и вручную проверить некоторые образцы. О, и исправьте базу данных.

 0
Author: Jason Antman, 2011-03-30 16:43:20

Предполагая, что вы извлекли переменную; для простоты демонстрации я просто установлю одну:

$myVar = '"   Production of Monthly Management Accounts and variance analysis<BR>';

Как говорится в другом ответе, trim() является вашим другом, как и str_replace() или strip_tags() в зависимости от того, что вы хотите сделать и что еще у вас может быть в вашей базе данных.

Попробуйте это (при условии, что вы сохранили содержимое в $myVar, как я в своем примере).

$cleanedVar = strip_tags(trim($myVar,'" '));

Или это:

$cleanedVar = str_replace("<BR>","",trim($myVar,'" '));

Оба из эти строки дадут вам результат в $cleanedvar в виде

Составление Ежемесячных управленческих отчетов и анализ отклонений

 0
Author: Codecraft, 2011-03-30 16:53:12