2015-08-26 77 views
-1

我希望找到並通過這種方法在HTML代碼編輯鏈接:如何在HTML代碼中查找和編輯鏈接?

  1. 鏈接找到
  2. 選擇原始URL
  3. 替換HREF

我可以用PHP驗證碼簡單的HTML DOM解析器,但我無法編輯鏈接。

我測試這個PHP簡單的HTML DOM解析器,但它不工作:

foreach($html->find('a') as $mylink){ 
preg_match('/q=(.+)&sa=/U', $mylink, $mylink_3); 
$mylink->href = $mylink_3; 
} 

我的原始來源是:

<div> 

<h3 class="r"><a href="/url?q=http://www.w3schools.com/php/&amp;sa=U&amp;ved=0CBQQFjAAahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&amp;usg=AFQjCNGazDJ5puRFYuhWUs0-q5Yq9EnkVw"><b>PHP</b>my php</a></h3> 
</div><div> 
<h3 class="r"><a href="/url?q=https://www.php.net/&amp;sa=U&amp;ved=0CB8QFjABahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&amp;usg=AFQjCNFekxb7S2RFF0wizEyO0Swem8s0-w"><b>PHP: Hypertext Preprocessor</b></a></h3> 
</div> 

我想有最後這樣的代碼:

<div> 

<h3 class="r"><a href="/url?q=http://www.w3schools.com/php/"><b>PHP</b>my php</a></h3> 
</div><div> 
<h3 class="r"><a href="https://www.php.net/"><b>PHP: Hypertext Preprocessor</b></a></h3> 
</div> 

我試了很多,並且可以使用的每個函數都經過了測試,但這不起作用。

+0

請在您的問題中包含您已經嘗試過的代碼 – Epodax

+0

我想知道您正在尋找類似[htmlspecialchars](http://de2.php.net/manual/en/function.htmlspecialchars .PHP)。 DOM解析器可能在某處存在某種「原始」函數,但不確定。 – Andrew

+0

如何在後端生成URL?你有權訪問PHP函數嗎?還是可以通過客戶端來解決這個問題? – Aziz

回答

0
$dom_document = new DOMDocument();  
$dom_document->loadHTML($your_html); 
$dom_xpath = new DOMXpath($dom_document); 

$hrefs = $dom_xpath->query('//a/child::getAttribute(\'href\')'); 
foreach ($hrefs as $href) 
{ 
    $href->data = 'new_href'; 
} 

或//一/ @ HREF

+0

感謝您的幫助。我測試了該代碼但出現此錯誤:警告:DOMXPath :: query()[domxpath.query]:無效的表達式 – SABA

0

它看起來像你想縮短一個符號後的鏈接。這應該實現這一目標:

$input = '<div> 
<h3 class="r"><a href="/url?q=http://www.w3schools.com/php/&amp;sa=U&amp;ved=0CBQQFjAAahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&amp;usg=AFQjCNGazDJ5puRFYuhWUs0-q5Yq9EnkVw"><b>PHP</b>my php</a></h3> 
</div><div> 
<h3 class="r"><a href="/url?q=https://www.php.net/&amp;sa=U&amp;ved=0CB8QFjABahUKEwj78p-XtcbHAhVEjiwKHbjpC0g&amp;usg=AFQjCNFekxb7S2RFF0wizEyO0Swem8s0-w"><b>PHP: Hypertext Preprocessor</b></a></h3> 
</div>'; 
    $doc = new DOMDocument(); 
    $doc->loadHTML($input); 
    $links = $doc->getElementsByTagName('a'); 
    foreach ($links as $link) { 
     $link->setAttribute('href', preg_replace('~&.*~', '', $link->getAttribute('href'))); 
    } 
    echo $doc->saveHTML(); 

輸出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><div> 

<h3 class="r"><a href="/url?q=http://www.w3schools.com/php/"><b>PHP</b>my php</a></h3> 
</div><div> 
<h3 class="r"><a href="/url?q=https://www.php.net/"><b>PHP: Hypertext Preprocessor</b></a></h3> 
</div></body></html> 

正則表達式表示,找到一個&,然後一切。然後將其替換爲無。 ~是分隔符,表示正則表達式的開始和結束位置。 .是任何字符,並且*是零次或多次出現次數。