return false;
}
+ $tagAttributes = (isset($tag['attributes']) ? $tag['attributes'] : []);
+
+ // right trim any attributes that are truly empty (= zero-length string) and are defined to be optional
+ $bbcodeAttributes = $this->bbcodes[$tag['name']]->getAttributes();
+ // reverse sort the bbcode attributes to start with the last attribute
+ usort($bbcodeAttributes, function(BBCodeAttribute $a, BBCodeAttribute $b) {
+ if ($a->attributeNo == $b->attributeNo) return 0;
+ return ($a->attributeNo < $b->attributeNo) ? 1 : -1;
+ });
+ foreach ($bbcodeAttributes as $attribute) {
+ if ($attribute->required) break;
+
+ $i = $attribute->attributeNo;
+ if (isset($tagAttributes[$i]) && $tagAttributes[$i] === '' && !isset($tagAttributes[$i + 1])) {
+ unset($tagAttributes[$i]);
+ }
+ else {
+ break;
+ }
+ }
+
foreach ($this->bbcodes[$tag['name']]->getAttributes() as $attribute) {
- if (!$this->isValidTagAttribute((isset($tag['attributes']) ? $tag['attributes'] : []), $attribute)) {
+ if (!$this->isValidTagAttribute($tagAttributes, $attribute)) {
return false;
}
}