Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chamilo-lms/main/inc/lib/system/text/encoding.class.php

158 lines
3.6 KiB

<?php
/**
* Set the system encoding to the plateform encoding.
*
* @todo:
* Note: those lines are here for ease of use only. They should be move away:
*
* 1 first autodetection should be done inside the Encoding class
* 2 this library should not call a chamilo specific function (this should
* be the other way around, chamilo calling the encoding functions)
*/
$plateform_encoding = api_get_system_encoding();
Encoding::system($plateform_encoding);
/**
* Encoding class. Handles text encoding. Usage:
*
* $encoding = Encoding::get('name');
* $decoder = $encoding->decoder();
* $decoder->convert('text');
*
* The system encoding is the platform/system/default encoding. This defaults to
* UTF8 but can be changed:
*
* Encoding::system('name');
*
* Note that Encoding returns to its name when converted to a string. As such it
* can be used in places where a string is expected:
*
* $utf8 = Encoding::Utf8();
* echo $utf8;
*
* @copyright (c) 2012 University of Geneva
* @license GNU General Public License - http://www.gnu.org/copyleft/gpl.html
* @author Laurent Opprecht <laurent@opprecht.info>
*/
class Encoding
{
private static $system = null;
/**
* Returns encoding for $name.
*
* @param string $name
* @return Encoding
*/
public static function get($name)
{
if (is_object($name)) {
return $name;
} else if (Encoding::utf8()->is($name)) {
return self::utf8();
} else {
return new self($name);
}
}
/**
* Returns the Utf8 encoding.
*
* @return Utf8
*/
public static function utf8()
{
return Utf8::instance();
}
/**
* Returns/set the system/default encoding.
*
* @return Encoding
*/
public static function system($value = null)
{
if (is_object($value)) {
self::$system = $value;
} else if (is_string($value)) {
self::$system = self::get($value);
}
return self::$system ? self::$system : self::utf8();
}
/**
* Detect encoding from an abstract.
*
* @param string $abstract
* @return Encoding
*/
public static function detect_encoding($abstract)
{
$encoding_name = api_detect_encoding($abstract);
return self::get($encoding_name);
}
protected $name = '';
protected function __construct($name = '')
{
$this->name = $name;
}
/**
* The name of the encoding
*
* @return string
*/
function name()
{
return $this->name;
}
/**
* The Byte Order Mark.
*
* @see http://en.wikipedia.org/wiki/Byte_order_mark
* @return string
*/
function bom()
{
return '';
}
/**
* Returns a decoder that convert encoding to another encoding.
*
* @param string|Encoder $to Encoding to convert to, defaults to system encoding
* @return Converter
*/
public function decoder($to = null)
{
$from = $this;
$to = $to ? $to : Encoding::system();
return EncodingConverter::create($from, $to);
}
/**
* Returns an encoder that convert from another encoding to this encoding.
*
* @param string|Encoder $from Encoding to convert from, defaults to system encoding.
* @return Converter
*/
public function encoder($from = null)
{
$from = $from ? $from : Encoding::system();
$to = $this;
return EncodingConverter::create($from, $to);
}
function __toString()
{
return $this->name();
}
}