2013-04-19 3 views
1

Я выполняю str_replace для переменной, содержащей строку HTML. Цель состоит в том, чтобы добавить «data-rel =» external »target =" _ blank "" ко всем a-href's.Использование str_replace только при выполнении условий

$html = str_replace("<a href=", "<a data-rel=\"external\" target=\"_blank\" href=", $html); 

Он отлично работает, но вот проблема: Если оригинал а-HREF является а-HREF = «электронная почта: [..], то он должен добавить„данные-отн =“внешний» целевой = "_System"»

. Пример:

<a href="http://apache.org">Link 1</a> 

должны стать:

<a data-rel="external" target="_blank" href="http://apache.org">Link 1</a> 

И

<a href="mailto:[email protected]">Link 2</a> 

должны стать:

<a data-rel="external" target="_system" href="mailto:[email protected]">Link 2</a> 

Любые идеи, как решить эту проблему?

+0

Рассматривали ли вы использование [парсер XML] (http://php.net/manual/en/class.domdocument.php)? – Antony

+0

Тогда используйте DOMDocument. –

+0

Почему бы просто не сделать 2 поиска и заменить – dt192

ответ

3

Run почтовую str_replace первый,

$html = str_replace("<a href=\"mailto:", 
    "<a data-rel=\"external\" target=\"_system\" href=\"mailto:", $html); 

После того как это выполнено, они не будут больше не затронуты str_replace ищет <a href, потому что они будут <a data-rel.

+0

Спасибо! Это так очевидно, не могу поверить, что я не видел этого сам :) – Publicus

+0

Нет проблем. Если прецедент становится более сложным, я бы предложил более сложное решение для парсинга, но для этого он работает. –

0

Я проверил бы появление подстроки "mailto:" в пределах $html и запускал разные команды str_replace в зависимости от того, действительно ли это правда.

+0

Я вижу, но строка $ html, вероятно, будет содержать множество разных ссылок, часто являясь сочетанием регулярных ссылок и mailto: links. – Publicus

+0

А, я понимаю. Тогда я бы порекомендовал ответ @ Oshawott. –

0

В других случаях, когда вы не могли бы использовать str_replace, preg_replace может стать под рукой:

preg_replace('/<a href="mailto/', '<a data-rel="external" target="_system" href="mailto', $html); 
0

Это работало для меня

<?php 
$html='<a href="http://apache.org">Link 1</a><a href="mailto:[email protected]">Link 2</a>'; 
$html = str_replace('<a href="mailto', '<a data-rel="external" target="_system" href="mailto', $html); 
$html = str_replace('<a href=', '<a data-rel="external" target="_blank" href=', $html); 
echo $html; 
?> 

или это

<?php 
$html='<a href="http://apache.org">Link 1</a><a href="mailto:[email protected]">Link 2</a>'; 
$html = str_replace(array('<a href="mailto','<a href='), array('<a data-rel="external" target="_system" href="mailto','<a data-rel="external" target="_blank" href='), $html); 
echo $html; 
?> 

выход

<a data-rel="external" target="_blank" href="http://apache.org">Link 1</a> 
<a data-rel="external" target="_system" href="mailto:[email protected]">Link 2</a> 
Смежные вопросы