101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// {{{ license
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// +----------------------------------------------------------------------+
							 | 
						||
| 
								 | 
							
								// | This library is free software; you can redistribute it and/or modify |
							 | 
						||
| 
								 | 
							
								// | it under the terms of the GNU Lesser General Public License as       |
							 | 
						||
| 
								 | 
							
								// | published by the Free Software Foundation; either version 2.1 of the |
							 | 
						||
| 
								 | 
							
								// | License, or (at your option) any later version.                      |
							 | 
						||
| 
								 | 
							
								// |                                                                      |
							 | 
						||
| 
								 | 
							
								// | This library is distributed in the hope that it will be useful, but  |
							 | 
						||
| 
								 | 
							
								// | WITHOUT ANY WARRANTY; without even the implied warranty of           |
							 | 
						||
| 
								 | 
							
								// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    |
							 | 
						||
| 
								 | 
							
								// | Lesser General Public License for more details.                      |
							 | 
						||
| 
								 | 
							
								// |                                                                      |
							 | 
						||
| 
								 | 
							
								// | You should have received a copy of the GNU Lesser General Public     |
							 | 
						||
| 
								 | 
							
								// | License along with this library; if not, write to the Free Software  |
							 | 
						||
| 
								 | 
							
								// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 |
							 | 
						||
| 
								 | 
							
								// | USA.                                                                 |
							 | 
						||
| 
								 | 
							
								// +----------------------------------------------------------------------+
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// }}}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Encode/decode Internationalized Domain Names.
							 | 
						||
| 
								 | 
							
								 * Factory class to get correct implementation either for php4 or php5.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @author  Markus Nix <mnix@docuverse.de>
							 | 
						||
| 
								 | 
							
								 * @author  Matthias Sommerfeld <mso@phlylabs.de>
							 | 
						||
| 
								 | 
							
								 * @package Net
							 | 
						||
| 
								 | 
							
								 * @version $Id: IDNA.php 284681 2009-07-24 04:24:27Z clockwerx $
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Net_IDNA
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    // {{{ factory
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Attempts to return a concrete IDNA instance for either php4 or php5.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param  array  $params   Set of paramaters
							 | 
						||
| 
								 | 
							
								     * @return object IDNA      The newly created concrete Log instance, or an
							 | 
						||
| 
								 | 
							
								     *                          false on an error.
							 | 
						||
| 
								 | 
							
								     * @access public
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    function getInstance($params = array())
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $version   = explode( '.', phpversion() );
							 | 
						||
| 
								 | 
							
								        $handler   = ((int)$version[0] > 4) ? 'php5' : 'php4';
							 | 
						||
| 
								 | 
							
								        $class     = 'Net_IDNA_' . $handler;
							 | 
						||
| 
								 | 
							
								        $classfile = 'Net/IDNA/' . $handler . '.php';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /*
							 | 
						||
| 
								 | 
							
								         * Attempt to include our version of the named class, but don't treat
							 | 
						||
| 
								 | 
							
								         * a failure as fatal.  The caller may have already included their own
							 | 
						||
| 
								 | 
							
								         * version of the named class.
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        @include_once $classfile;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /* If the class exists, return a new instance of it. */
							 | 
						||
| 
								 | 
							
								        if (class_exists($class)) {
							 | 
						||
| 
								 | 
							
								            return new $class($params);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // }}}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // {{{ singleton
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Attempts to return a concrete IDNA instance for either php4 or php5,
							 | 
						||
| 
								 | 
							
								     * only creating a new instance if no IDNA instance with the same
							 | 
						||
| 
								 | 
							
								     * parameters currently exists.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param  array  $params   Set of paramaters
							 | 
						||
| 
								 | 
							
								     * @return object IDNA      The newly created concrete Log instance, or an
							 | 
						||
| 
								 | 
							
								     *                          false on an error.
							 | 
						||
| 
								 | 
							
								     * @access public
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    function singleton($params = array())
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        static $instances;
							 | 
						||
| 
								 | 
							
								        if (!isset($instances)) {
							 | 
						||
| 
								 | 
							
								            $instances = array();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $signature = serialize($params);
							 | 
						||
| 
								 | 
							
								        if (!isset($instances[$signature])) {
							 | 
						||
| 
								 | 
							
								            $instances[$signature] = Net_IDNA::getInstance($params);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $instances[$signature];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    // }}}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								?>
							 |