+|<+/', $var); } } /** * fixer类,处理数据。 * fixer class, to fix data types. * * @package framework */ class fixer extends baseFixer { public function get($fields = '') { $fields = str_replace(' ', '', trim($fields)); /* Get extend field by flow. */ global $config; $flowFields = array(); if(isset($config->bizVersion)) { global $app, $dbh; $moduleName = $app->getModuleName(); $stmt = $dbh->query("SELECT * FROM " . TABLE_WORKFLOWFIELD . " WHERE `module` = '{$moduleName}' and `buildin` = '0'"); while($flowField = $stmt->fetch()) $flowFields[$flowField->field] = $flowField; } foreach($this->data as $field => $value) { /* Implode array when form has array. */ if(isset($flowFields[$field]) and is_array($value)) { $canImplode = true; foreach($value as $k => $v) { if(is_object($v) or is_array($v)) { $canImplode = false; break; } } if($canImplode) $this->data->$field = implode(',', $value); } if(isset($flowFields[$field]) and ($flowFields[$field]->control == 'textarea' or $flowFields[$field]->control == 'richtext')) $this->skipSpecial($field); $this->specialChars($field); $this->data->$field = $this->filterEmoji($value); } if(empty($fields)) return $this->data; if(strpos($fields, ',') === false) return $this->data->$fields; /* Process fields for check by key. */ $fields = array_flip(explode(',', $fields)); foreach($this->data as $field => $value) { if(!isset($fields[$field])) unset($this->data->$field); if(!isset($this->stripedFields[$field])) $this->specialChars($field); } return $this->data; } /** * 过滤Emoji表情。 * Filter Emoji. * * @param string $value * @access public * @return object */ public function filterEmoji($value) { if(is_object($value) or is_array($value)) { foreach($value as $subValue) { $subValue = $this->filterEmoji($subValue); } } else { $value = preg_replace_callback('/./u', function (array $match) { return strlen($match[0]) >= 4 ? '' : $match[0]; }, $value); } return $value; } }