0

我想做类似的事情:

<?php
$text = "<font style='color: #fff'>";
$replaceandshow = str_replace("<font style=\"?\">", "the font style is ?", $text);
echo $replaceandshow;
?>

例如?是颜色:#fff,但我希望 PHP 会自行跟踪它,是否可能 + 如果可能,我该怎么做?

PS:有人给了我一个代码,但它现在可以工作了,它为我显示了一个白页。

<?php
$colorstring = "<font style='#fff'>";
$searchcolor = preg_replace('[a-fA-F0-9]{3,6}','[font style=$1]Test[/font]',$colorstring);
echo $searchcolor;

感谢您的帮助。

4

3 回答 3

1

由于您基本上需要从任何 HTML 中提取任何属性,因此您可以使用 php XML 解析来执行此操作。

<?php
$doc=new DOMDocument();
$doc->loadHTML("<html><body>Test<br><font style='color: #fff;'>hellow</font><a href='www.somesite.com' title='some title'>some site</a></body></html>");
$xml=simplexml_import_dom($doc); // just to make xpath more simple
$fonts=$xml->xpath('//font');
foreach ($fonts as $font) {
    echo 'font style = '.$font['style']."<br />";
}

$as=$xml->xpath('//a');
foreach ($as as $a) {
    echo 'href = '.$a['href'] . ' title = ' . $a['title']."<br />";
}
?>

这将返回:

font style = color: #fff;
href = www.somesite.com title = some title

您可以为需要提取的每个 HTML 标记使用不同的 foreach 循环,然后输出您想要的任何属性。

基于如何使用 php 从 html 中提取 img src、title 和 alt 的答案?

于 2012-08-09T18:18:38.603 回答
1

由于错误报告已关闭,您将获得白页。您的代码中的错误是缺少分隔符preg_replace。此外,要使用反向引用,您应该将匹配所需的表达式括在括号中。

preg_replace('/([a-fA-F0-9]{3,6})/','the font style is $1',$colorstring);

应给出正确的输出。

您可能会考虑使用更严格的表达式,因为当前表达式对匹配其他字符串(如“FFFont”)非常开放。另一件需要注意的是,表达式可能会导致类似的输出。

<font style='color: the color is #fff'>

尝试:

/<font style='color: #([a-fA-F0-9]{3,6})'>/
于 2012-08-09T18:23:28.283 回答
0

这将适用于简单的style属性:

$text = "<font style='color: #fff'>";
preg_match("/<font style=['\"]([^'\"]+)['\"]>/", $text, $matches);
echo "The font style is ".$matches[1];

对于更复杂的事情(例如:如果它包含引号),您需要使用 HTML 解析器,例如http://www.php.net/manual/en/class.domdocument.php

于 2012-08-09T18:17:53.587 回答