2014-10-21 3 views
0

Я хочу преобразовать текстовые ссылки в «реальные» ссылки, используя php.PHP - Текстовая ссылка для ссылки

Моя проблема в том, что и изображения меняются - кто знает, как я могу это исправить?

Some text with link - the first (Image) should stay as it is, the others should be converted 
 

 
<img src="http://www.google.de/someimage.jpg"> 
 
www.google.de 
 
http://www.google.de

Сценарий я использую

$text = preg_replace(
       array(
        '/(?(?=<a[^>]*>.+<\/a>)(?:<a[^>]*>.+<\/a>)|([^="\']?)(\b(?:https?|ftp|bf2|):\/\/[^<> \n\r]+))/iex', 
        '/<a([^>]*)target="?[^"\']+"?/i', 
        '/<a([^>]+)>/i', 
        '/(^|\s)(www.[^<> \n\r]+)/iex'), 
       array(
        "stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\">\\2</a>\\3':'\\0'))", 
        '<a\\1', 
        '<a\\1 target="_blank">', 
        "stripslashes((strlen('\\2')>0?'\\1<a href=\"http://\\2\">\\2</a>\\3':'\\0'))", 
       ), 
       $text 
      ); 
+4

Не следует использовать регулярное выражение для разбора/редактирования HTML - использовать XML-парсер. Разбирайте документ, затем перебирайте узлы и применяйте изменения только к текстовым узлам. –

ответ

0

В ваших preg_replace массивов:

  • Линия 1: вызывает проблемы с <img src=""> ссылки но работает должным образом ссылки начиная с http: //.
  • Линии 2 и 3: не повлияли на ваш пример кода с помощью ссылок google.de.
  • Строка 4: работает правильно для ссылок, начинающихся с www.

Адаптация линии 4 вы можете использовать аналогичное регулярное выражение для HTTP ссылки:

$text = preg_replace( 
    array( 
    '/(^|\s)(http:\/\/www.[^<> \n\r]+)/iex', 
    '/(^|\s)(www.[^<> \n\r]+)/iex' 
), array(
    "stripslashes((strlen('\\2')>0?'\\1<a href=\"http://\\2\">\\2</a>\\3':'\\0'))", 
    "stripslashes((strlen('\\2')>0?'\\1<a href=\"http://\\2\">\\2</a>\\3':'\\0'))" 
), 
    $text 
); 
+0

спасибо за помощь: D – user3359899

Смежные вопросы