Как заменить текст в HTML-теге? - PullRequest
0 голосов
/ 09 октября 2010

У меня есть строка

$text =<<<HTML
<div align="center"><center><img src='http://ecx.images-amazon.com/images/I/41KZa6thzcL._SS500_.jpg' alt="The Birthday of the World: And Other Stories"/></center><br/>
thanks all "coder". </div>

HTML;

Я хочу заменить все "из тега на \" или "на \" и не заменять, если "или" нет в теге

так что результат

  $text =<<<HTML
    <div align=\"center\"><center><img src=\'http://ecx.images-amazon.com/images/I/41KZa6thzcL._SS500_.jpg\' alt=\"The Birthday of the World: And Other Stories\"/></center><br/>
     thanks all "coder".
    </div>
       HTML;

Пожалуйста, помогите мне. Большое спасибо

Ответы [ 3 ]

2 голосов
/ 09 октября 2010

Используйте DOM-анализатор, такой как PHP Simple HTML DOM Parser , чтобы просмотреть HTML (да, он будет работать с фрагментами HTML, такими как в вашем примере).

При прохождении сохраните innerText в массиве и замените этот внутренний текст заполнителем, таким как <![CDATA[INNER_TEXT_PLACE_HOLDER_0]]> (или любым другим, если вы выберете, если он не будет где-то еще в DOM и имеет целое число, которое будет совпадать с ключом массива в вашем массиве innerTexts).

Вывести DOM обратно в строку, а затем выполнить глобальную замену кавычек.

Теперь переберите ваш массив innerTexts, например,

foreach ($innerTexts as $index => $innerText)

замена <![CDATA[INNER_TEXT_PLACE_HOLDER_$index]]> на $innerText

0 голосов
/ 09 октября 2010

Это может быть не быстро, но работает:

$dom = new DOMDocument;
$dom->loadHTML($text);
$xPath = new DOMXPath($dom);

$str = array();
foreach($xPath->query('//text()') as $node) {
    $str['find'][] = addslashes($node->wholeText);
    $str['replace'][] = $node->wholeText;
}
$text = str_replace($str['find'], $str['replace'], addslashes($text));

echo $text;

дает ( переформатирован для удобства чтения ):

<div align=\"center\">
  <center>
     <img src=\'http://ecx.images-amazon.com/images/I/41KZa6thzcL._SS500_.jpg\' 
          alt=\"The Birthday of the World: And Other Stories\"/>
  </center>
  <br/>thanks all "coder".
</div>
0 голосов
/ 09 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...