columnToDecode = 'label'; } /** * Decodes the given value * * @param string $value * @return mixed|string */ public static function decodeLabelSafe($value) { if (empty($value)) { return $value; } $raw = urldecode($value); $value = htmlspecialchars_decode($raw, ENT_QUOTES); // ENT_IGNORE so that if utf8 string has some errors, we simply discard invalid code unit sequences $style = ENT_QUOTES | ENT_IGNORE; // See changes in 5.4: http://nikic.github.com/2012/01/28/htmlspecialchars-improvements-in-PHP-5-4.html // Note: at some point we should change ENT_IGNORE to ENT_SUBSTITUTE $value = htmlspecialchars($value, $style, 'UTF-8'); return $value; } /** * Decodes all columns of the given data table * * @param DataTable $table */ public function filter($table) { foreach ($table->getRows() as $row) { $value = $row->getColumn($this->columnToDecode); if ($value !== false) { $value = self::decodeLabelSafe($value); $row->setColumn($this->columnToDecode, $value); $this->filterSubTable($row); } } } }