2016-08-16 3 views
0

Я создаю локальный php-скрипт для управления файлом HTML, экспортированным из Photoshop. Мне нужно добавить некоторые параметры для каждого URL-адреса. Это то, что я пробовал:Добавление параметров в URL-адреса из файла HTML

$newHtmlFile = 'exported.html'; //HTML file exported from photoshop 
$htmlContent = file_get_contents($newHtmlFile); 

$randomQuery = 'utm_source=onlinenewsletter&utm_medium=email&utm_content=random&utm_campaign=test'; 

$dom = new DOMDocument; 
@$dom->loadHTML($htmlContent); 
foreach($dom->getElementsByTagName('a') as $thisLink){ 
    $thisUrl = $thisLink->getAttribute('href'); 
    $parsedUrl = parse_url($thisUrl); 
    if($parsedUrl['path'] == null){ $thisUrl .= '/'; } 
    $separator = ($parsedUrl['query'] == NULL) ? '?' : '&'; 
    $newUrl = $thisUrl . $separator . $query; 

    file_put_contents($newHtmlFile, preg_replace('~\b' .$thisUrl. '\b~u', $newUrl, file_get_contents($newHtmlFile))); 
} 

Пример HTML экспортируемого из фотошопа:

<html> 
<head> 
    <title>Some Page</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> 
    <table id="Tabla_01" width="570" height="617" border="0" cellpadding="0" cellspacing="0"> 
     <tr> 
      <td> 
       <a href="http://somepage.com/es/es/"> 
        <img src="images/some_image_01.jpg" width="285" height="160" border="0" alt=""></a></td> 
      <td> 
       <a href="http://somepage.com/es/es/"> 
        <img src="some_image_02.jpg" width="285" height="160" border="0" alt=""></a></td> 
     </tr> 
    </table> 
</body> 

Это не приводит к возникновению ошибок и не заменяет URLs.

+0

* Это не приводит к возникновению ошибок * - Тогда, пожалуйста, не [Погасить] (http://php.net/manual/en/language.operators.errorcontrol.php) ошибки, которые может помочь. – Script47

+0

писать и перезагружать файл на каждую итерацию ????? – cske

ответ

0

Как я вижу, у вас есть тот же URL-адрес в вашем html-файле, его лучше сохранить на своем месте, а не использовать preg_replace. Вы можете использовать это:

$newHtmlFile = 'exported.html'; //HTML file exported from photoshop 
$htmlContent = file_get_contents($newHtmlFile); 

$randomQuery = 'utm_source=onlinenewsletter&utm_medium=email&utm_content=random&utm_campaign=test'; 

$dom = new DOMDocument; 

@$dom->loadHTML($htmlContent); 

foreach($dom->getElementsByTagName('a') as $thisLink){ 
    $thisUrl = $thisLink->getAttribute('href'); 
    $parsedUrl = parse_url($thisUrl); 
    if($parsedUrl['path'] == null){ $thisUrl .= '/'; echo "here";} 
    $separator = !isset($parsedUrl['query']) ? '?' : '&'; 
    $newUrl = $thisUrl . $separator . $randomQuery; 

    //echo "$thisUrl - $newUrl <br/>"; 
    //file_put_contents($newHtmlFile, preg_replace('@' .$thisUrl. '@', $newUrl, file_get_contents($newHtmlFile))); 
    $thisLink->setAttribute('href', $newUrl); 
} 

file_put_contents($newHtmlFile, $dom->saveHTML());