0

我想改变类似的<var title="some text">Something</var>东西<abbr title="some text">Something</abbr>。我有这段代码,但不知何故它没有在我的网页上显示缩写标签:

$arr[0] = preg_replace("#<var(.*?)>(.*?)</var>#", "<abbr $1>$2</abbr>", "".$arr[0]."");

我究竟做错了什么?

4

2 回答 2

2

是的,您应该使用 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
}

您可以从这个演示中看到,这会产生:

<abbr title="some text">Something</abbr>
于 2012-12-13T19:29:51.563 回答
0

更改"<abbr $1>$2</abbr>"'<abbr $1>$2</abbr>'(注意单引号)。

请参阅单引号字符串

于 2012-12-13T19:23:28.843 回答