我想改变类似的<var title="some text">Something</var>
东西<abbr title="some text">Something</abbr>
。我有这段代码,但不知何故它没有在我的网页上显示缩写标签:
$arr[0] = preg_replace("#<var(.*?)>(.*?)</var>#", "<abbr $1>$2</abbr>", "".$arr[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]."");
我究竟做错了什么?
是的,您应该使用 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>
更改"<abbr $1>$2</abbr>"
为'<abbr $1>$2</abbr>'
(注意单引号)。
请参阅单引号字符串。