public function grabTagsFromText() { /** * @var $tag DOMElement */ $filters = array('|^\\([0-9\\.]+\\)$|'); $doc = new DOMDocument(); @$doc->loadHTML($this->text); $xpath = new DOMXPath($doc); $tags = $xpath->query('//strong'); foreach ($tags as $tag_name) { $tag_name = trim(utf8_decode($tag_name->textContent)); if (mb_strlen($tag_name, 'utf-8') > 30) { continue; } foreach ($filters as $pattern) { if (preg_match($pattern, $tag_name)) { continue 2; } } $tag = Tag::model()->find("name='{$tag_name}'"); if (!$tag) { $tag = new Tag(); $tag->name = $tag_name; $tag->save(); } TagRel::createIfNotExists($tag->id, $this); } }