Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** I18N Utility file.** This program is free software; you can redistribute it and/or modify* it under the terms of the BSD License.** Copyright(c) 2004 by Wei Zhuo. All rights reserved.** To contact the author write to <weizhuo[at]gmail[dot]com>* The latest version of PRADO can be obtained from:* {@link http://prado.sourceforge.net/}** @author Wei Zhuo <weizhuo[at]gmail[dot]com>* @version $Revision: 1.3 $ $Date: 2005/08/27 03:21:12 $* @package System.I18N.core*//*** For a given DSN (database connection string), return some information* about the DSN. This function comes from PEAR's DB package.** LICENSE: This source file is subject to version 3.0 of the PHP license* that is available through the world-wide-web at the following URI:* http://www.php.net/license/3_0.txt. If you did not receive a copy of* the PHP License and are unable to obtain it through the web, please* send a note to license@php.net so we can mail you a copy immediately.** @param string DSN format, similar to PEAR's DB* @return array DSN information.* @author Stig Bakken <ssb@php.net>* @author Tomas V.V.Cox <cox@idecnet.com>* @author Daniel Convissor <danielc@php.net>* @copyright 1997-2005 The PHP Group* @license http://www.php.net/license/3_0.txt PHP License 3.0* @link http://pear.php.net/package/DB*/function parseDSN($dsn){if (is_array($dsn)) {return $dsn;}$parsed = array('phptype' => false,'dbsyntax' => false,'username' => false,'password' => false,'protocol' => false,'hostspec' => false,'port' => false,'socket' => false,'database' => false);// Find phptype and dbsyntaxif (($pos = strpos($dsn, '://')) !== false) {$str = substr($dsn, 0, $pos);$dsn = substr($dsn, $pos + 3);} else {$str = $dsn;$dsn = null;}// Get phptype and dbsyntax// $str => phptype(dbsyntax)if (preg_match('|^(.+?)\((.*?)\)$|', $str, $arr)) {$parsed['phptype'] = $arr[1];$parsed['dbsyntax'] = (empty($arr[2])) ? $arr[1] : $arr[2];} else {$parsed['phptype'] = $str;$parsed['dbsyntax'] = $str;}if (empty($dsn)) {return $parsed;}// Get (if found): username and password// $dsn => username:password@protocol+hostspec/databaseif (($at = strrpos($dsn,'@')) !== false) {$str = substr($dsn, 0, $at);$dsn = substr($dsn, $at + 1);if (($pos = strpos($str, ':')) !== false) {$parsed['username'] = rawurldecode(substr($str, 0, $pos));$parsed['password'] = rawurldecode(substr($str, $pos + 1));} else {$parsed['username'] = rawurldecode($str);}}// Find protocol and hostspec// $dsn => proto(proto_opts)/databaseif (preg_match('|^([^(]+)\((.*?)\)/?(.*?)$|', $dsn, $match)) {$proto = $match[1];$proto_opts = (!empty($match[2])) ? $match[2] : false;$dsn = $match[3];// $dsn => protocol+hostspec/database (old format)} else {if (strpos($dsn, '+') !== false) {list($proto, $dsn) = explode('+', $dsn, 2);}if (strpos($dsn, '/') !== false) {list($proto_opts, $dsn) = explode('/', $dsn, 2);} else {$proto_opts = $dsn;$dsn = null;}}// process the different protocol options$parsed['protocol'] = (!empty($proto)) ? $proto : 'tcp';$proto_opts = rawurldecode($proto_opts);if ($parsed['protocol'] == 'tcp') {if (strpos($proto_opts, ':') !== false) {list($parsed['hostspec'], $parsed['port']) = explode(':', $proto_opts);} else {$parsed['hostspec'] = $proto_opts;}} elseif ($parsed['protocol'] == 'unix') {$parsed['socket'] = $proto_opts;}// Get dabase if any// $dsn => databaseif (!empty($dsn)) {// /databaseif (($pos = strpos($dsn, '?')) === false) {$parsed['database'] = $dsn;// /database?param1=value1¶m2=value2} else {$parsed['database'] = substr($dsn, 0, $pos);$dsn = substr($dsn, $pos + 1);if (strpos($dsn, '&') !== false) {$opts = explode('&', $dsn);} else { // database?param1=value1$opts = array($dsn);}foreach ($opts as $opt) {list($key, $value) = explode('=', $opt);if (!isset($parsed[$key])) { // don't allow params overwrite$parsed[$key] = rawurldecode($value);}}}}return $parsed;}/*** Convert strings to UTF-8 via iconv. NB, the result may not by UTF-8* if the conversion failed.* @param string string to convert to UTF-8* @return string UTF-8 encoded string, original string if iconv failed.*/function I18N_toUTF8($string, $from){if($from != 'UTF-8'){$s = iconv($from,'UTF-8',$string); //to UTF-8return $s !== false ? $s : $string; //it could return false}return $string;}/*** Convert UTF-8 strings to a different encoding. NB. The result* may not have been encoded if iconv fails.* @param string the UTF-8 string for conversion* @return string encoded string.*/function I18N_toEncoding($string, $to){if($to != 'UTF-8'){$s = iconv('UTF-8', $to, $string);return $s !== false ? $s : $string;}return $string;}?>