我想將<var title="some text">Something</var>
改爲<abbr title="some text">Something</abbr>
。我有這個代碼,但不知何故,它不顯示我的網頁上的abbr標記:爲什麼我的正則表達式代碼不顯示html代碼?
$arr[0] = preg_replace("#<var(.*?)>(.*?)</var>#", "<abbr $1>$2</abbr>", "".$arr[0]."");
我在做什麼錯?
我想將<var title="some text">Something</var>
改爲<abbr title="some text">Something</abbr>
。我有這個代碼,但不知何故,它不顯示我的網頁上的abbr標記:爲什麼我的正則表達式代碼不顯示html代碼?
$arr[0] = preg_replace("#<var(.*?)>(.*?)</var>#", "<abbr $1>$2</abbr>", "".$arr[0]."");
我在做什麼錯?
是的,你應該使用一個HTML解析器,並避免使用正則表達式解析HTML:
// Load the HTML into the parser
$doc = new DOMDocument;
$doc->loadHTML('<var title="some text">Something</var>');
// Find the <var> tags, and create new <abbr> tags from them.
foreach($doc->getElementsByTagName('var') as $var) {
$abbr = $doc->createElement('abbr', $var->textContent);
$abbr->setAttribute('title', $var->getAttribute('title'));
echo $doc->saveHTML($abbr); // Here is your new <abbr> tag
}
您可以從this demo看出,這將產生:
<abbr title="some text">Something</abbr>
什麼是#符號? – Geoff
您是否將返回值分配給變量?它沒有替換原地。 –
@Geoff這是一個分隔符。他們可以是很多不同的東西,不僅僅是'/ pattern /' –