簡體   English   中英

在preg_replace中使用正則表達式來匹配html href錨標記

[英]Using regex in preg_replace to match an html href anchor tag

我正在嘗試使用preg_replace進行替換

<a href="WWW.ANYURL.COM">DISPLAY_TEXT</a>

<a href="WWW.ANYURL.COM">DISPLAY_TEXT</a>

這是我的代碼:

$string = htmlentities(mysql_real_escape_string($string1)); 
$newString = preg_replace('#&lt;a\ href=&quot;([^&]*)&quot;&gt;([^&]*)&lt;/a&gt;#','<a href="$1">$2</a>',$string);

如果我進行有限測試,例如:

$newString = preg_replace('#&lt;a\ href#','TEST',$string);

然后

&lt;a href=&quot;WWW.ANYURL.COM&quot;&gt;DISPLAYTEXT&lt;/a&gt;

TEST=&quot;WWW.ANYURL.COM&quot;&gt;DISPLAYTEXT&lt;/a&gt;

但是,如果我嘗試使其也匹配“ =”,它的作用就好像找不到匹配項,即

$newString = preg_replace('#&lt;a\ href=#','TEST',$string);

返回原始值不變:

&lt;a href=&quot;WWW.ANYURL.COM&quot;&gt;DISPLAY_TEXT&lt;/a&gt;

我已經做了幾個小時,任何幫助將不勝感激。

編輯:上下文中的代碼

$title = clean_input($_POST['title']);
$story = clean_input($_POST['story']);

function clean_input($string) 
  { 
  if(get_magic_quotes_gpc())
  {
   $string = stripslashes($string);
  }
$string = htmlentities(mysql_real_escape_string($string)); 
$findValues = array("&lt;b&gt;","&lt;/b&gt;");
$newValues = array("<b>", "</b>");
$newString = str_replace($findValues, $newValues, $string);
$newString2 = preg_replace('#&lt;a\ href=&quot;([^&]*)&quot;&gt;([^&]*)&lt;/a&gt;#','<a href="$1">$2</a>',$newString);
return $newString2;
}

樣本$ story = Lorem ipsum dolor坐滿了,一直奉獻着精英。 <a href="www.google.com">Google</a> Vivamus quis sem felis。 Morbi vitae neque ac neque blandit malesuada lobortis坐在amet justo。 Donec convallis,尼古拉·尼古拉時代,neque felis scelerisque nibh,在野外的feugiat lectus erat。 在et euismod中。 <pernicious code></code> Pellentesque vitae ante orci,netal ultrices neque。 <a href="www.yahoo.com">Yahoo</a>在非零智者中,前庭faucibus metus。 Fusce egestas viverra arcu, <b>ac</b> sagittis leo facilisis in。Nulla facilisi。

我只希望將諸如href和粗體之類的一些標簽作為代碼允許通過。

您無需手動更換任何東西。 如果這是您的整個輸入字符串,請使用html_entity_decode()將轉義符html_entity_decode()<>


同樣,您的正則表達式可與示例文本一起使用。

您的問題是過早的mysql_real_escape_string()調用。 它增加了反斜線的"在HTML雙引號,這就是為什么回轉換失敗(您正則表達式是不是尋找准備\\&quot;

避免那樣。 按照手冊的建議,擺脫難看的clean_string() hack和magic_quotes 您必須插入數據庫之前 (而不是更早)進行數據庫轉義。 (或者更好的方法是使用帶有准備好的語句的更簡單的PDO 。)

也要避免$newString123變量重復,只要覆蓋重寫字符串時已經存在的變量即可。

您也可以這樣:

$str = "&lt;a href=&quot;WWW.ANYURL.COM&quot;&gt;DISPLAY_TEXT&lt;/a&gt;";
echo "Your html code is thus: " . htmlspecialchars_decode($str);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM