Regex для замены <или> на> или <внутри HTML-тега - PullRequest
0 голосов
/ 05 ноября 2010

например.

<html>
<head></head>
<body>
<div>
<h1>-----> hello! ----< </h1>
</div>
</body>

Я хочу заменить> и <внутри тега h1 соответствующими> и <</p>

, что является правильным шаблоном?

заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

По соглашению с комментатором «Почему этот битый HTML генерируется в первую очередь?», Если вы представляете такие документы, то у вас будут именно те проблемы, которые у вас есть в данный момент.Существует две допустимые ситуации:

  • У вас есть некоторые данные (без HTML-кода), например, набор строк в PHP
  • У вас есть HTML-документ, содержащий теги и текст, который является HTMLescaped

Поэтому, когда вы генерируете HTML-документ из ваших исходных данных (строк, базы данных), вам необходимо выполнить их экранирование (например, используя htmlspecialchars , как правильно указал другой ответчик)..)

Вы должны любой ценой избегать ситуации, когда у вас есть строка, подобная вашей, которая имеет HTML-теги и неэкранированный текст.

Например, если вы отправляете текстсодержал текст <b>text</b>, и вы буквально хотели, чтобы этот текст отображался в HTML-документе, т.е. вы хотели, чтобы угловые скобки были видны, а не были выделены жирным шрифтом (например, вы писали документ о том, как программировать HTML), а затему вас нет возможности отличить это от реального HTML-кода, если у вас есть такой документ.

1 голос
/ 05 ноября 2010

Вы можете бросить его на tidy (см. документы ) и посмотреть, сможет ли он исправить ошибки. Намного лучше, чем пытаться делать "правильные вещи" самостоятельно с помощью регулярных выражений.

$html = <<<EOT
<html>
<head></head>
<body>
<div>
<h1>-----> hello! ----< </h1>
</div>
</body>
EOT;

$config = array ( 
  'clean'                       => true, 
  'drop-proprietary-attributes' => true, 
  'output-xhtml'                => false, 
  'show-body-only'              => false, 
  'wrap'                        => '0'
); 

$tidy = new tidy();
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();

echo tidy_get_output($tidy);

Возможно, вы должны сначала включить tidy в своей среде PHP.

1 голос
/ 05 ноября 2010

Я бы прошел через приборку .

...