轉json就沒什麼好說的了,想說轉xml應該也是很簡單的東西,不過還真遇到一些問題
結合一下兩者,利用同一個function回覆
- array to xml
原本在google了一段code後,後來發現有中文xml會掛掉因為有不合法字元,
後來找到以下的code有編碼過,才知道原是編碼的問題
function toXml($data = array(), $structure = NULL, $basenode = 'xml'){ // turn off compatibility mode as simple xml throws a wobbly if you don't. if (ini_get('zend.ze1_compatibility_mode') == 1) { ini_set('zend.ze1_compatibility_mode', 0); } if ($structure == NULL) { $structure = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$basenode />"); } // loop through the data passed in. $data = $this->_force_loopable($data); foreach ($data as $key => $value) { // no numeric keys in our xml please! if (is_numeric($key)) { // make string key... //$key = "item_". (string) $key; $key = "item"; } // replace anything not alpha numeric $key = preg_replace('/[^a-z_]/i', '', $key); // if there is another array found recrusively call this function if (is_array($value) OR is_object($value)) { $node = $structure->addChild($key); // recrusive call. $this->_format_xml($value, $node, $basenode); } else { // Actual boolean values need to be converted to numbers is_bool($value) AND $value = (int) $value; // add single node. $value = htmlspecialchars(html_entity_decode($value, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, "UTF-8"); $UsedKeys[] = $key; $structure->addChild($key, $value); } } // pass back as string. or simple xml object if you want! return $structure->asXML(); } function _force_loopable($data){ // Force it to be something useful if ( ! is_array($data) AND ! is_object($data)) { $data = (array) $data; } return $data; }
- 下header
browser才會當成xml,而不是html
$array = array(...); header('Content-type: application/xml;charset=utf-8'); exit(toXml($array)) ;
結合一下兩者,利用同一個function回覆
//給header用 $_supported_formats = array( 'xml' => 'application/xml', 'rawxml' => 'application/xml', 'json' => 'application/json', 'jsonp' => 'application/javascript', 'serialize' => 'application/vnd.php.serialized', 'php' => 'text/plain', 'html' => 'text/html', 'csv' => 'application/csv' ); function response($data, $format = 'json'){ header('Content-type: '.$this->_supported_formats[$format]); switch (strtolower($format)){ case 'xml': exit($this->toXml($data)); case 'json': default: exit(json_encode($data)); } }
沒有留言:
張貼留言