1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| <?php
class OptimizeHTML
{
private $Tag;
private $HTML;
private $SkipTagsArray = array('head', 'script', 'style');
private $SkipTagsString;
function __construct($HTML)
{
$this->HTML = $HTML;
}
public function AddSkipTag($Tag)
{
if ( in_array(strtolower($Tag), $this->SkipTagsArray) === false ) {
$this->SkipTagsArray[] = strtolower($Tag);
$this->SkipTagsString = implode('|', $this->SkipTagsArray);
}
}
public function RemoveSkipTag($Tag)
{
$skip = array_search(strtolower($Tag), $this->SkipTagsArray);
if ($skip !== false) {
array_splice($this->SkipTagsArray, $skip, 1);
$this->SkipTagsString = implode('|', $this->SkipTagsArray);
}
}
private function ReplaceCallback($Match)
{
// $Match[2] car maintenant $Match[1] sert aux tags à toujours exclures
if (empty($Match[2])) return $Match[0];
return sprintf('<%1$s>%2$s</%1$s>', $this->Tag, $Match[2]);
}
public function AddTagToKeyword($Tag, $Keyword)
{
$this->Tag = $Tag;
$SkipTags = sprintf('<(%s)\b[^>]*>.*?</\1>', $this->SkipTagsString);
$regex = sprintf('@%1$s|<%2$s\b[^>]*>.*?</%2$s>|</?[^>]+>|\b(%3$s)\b@si',
$SkipTags,
$Tag,
$Keyword);
$this->HTML = preg_replace_callback($regex,
array($this, 'ReplaceCallback'),
$this->HTML);
}
public function GetHTML()
{
return $this->HTML;
}
}
$html = 'Si par exemple, le mot contenu dans la <a title="voiture"/>BDD est
<strong><em>voiture</em></strong>, il doit quand même me remplace
<em>VOituRE</em>. Une voiturette est une petite <strong>voiture</strong>?
Et <b>voiture</b> ne doit pas être encadrer par une balise strong car il y a
déjà b!';
$OptimizeHTML = new OptimizeHTML($html);
$OptimizeHTML->AddSkipTag('b'); // pas de <strong> sur <b>
$OptimizeHTML->AddTagToKeyword('strong', 'voiture');
$OptimizeHTML->RemoveSkipTag('b'); // ré-authoriser <b>
$OptimizeHTML->AddSkipTag('i'); // pas de <em> sur <i>
$OptimizeHTML->AddTagToKeyword('em', 'voiture');
echo $OptimizeHTML->GetHTML();
?> |
Partager