diff options
Diffstat (limited to 'framework/web/helpers/CJavaScript.php')
| -rw-r--r-- | framework/web/helpers/CJavaScript.php | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/framework/web/helpers/CJavaScript.php b/framework/web/helpers/CJavaScript.php new file mode 100644 index 0000000..7454f17 --- /dev/null +++ b/framework/web/helpers/CJavaScript.php @@ -0,0 +1,120 @@ +<?php +/** + * CJavaScript helper class file. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @link http://www.yiiframework.com/ + * @copyright Copyright © 2008-2011 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +/** + * CJavaScript is a helper class containing JavaScript-related handling functions. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @version $Id: CJavaScript.php 2799 2011-01-01 19:31:13Z qiang.xue $ + * @package system.web.helpers + * @since 1.0 + */ +class CJavaScript +{ + /** + * Quotes a javascript string. + * After processing, the string can be safely enclosed within a pair of + * quotation marks and serve as a javascript string. + * @param string $js string to be quoted + * @param boolean $forUrl whether this string is used as a URL + * @return string the quoted string + */ + public static function quote($js,$forUrl=false) + { + if($forUrl) + return strtr($js,array('%'=>'%25',"\t"=>'\t',"\n"=>'\n',"\r"=>'\r','"'=>'\"','\''=>'\\\'','\\'=>'\\\\','</'=>'<\/')); + else + return strtr($js,array("\t"=>'\t',"\n"=>'\n',"\r"=>'\r','"'=>'\"','\''=>'\\\'','\\'=>'\\\\','</'=>'<\/')); + } + + /** + * Encodes a PHP variable into javascript representation. + * + * Example: + * <pre> + * $options=array('key1'=>true,'key2'=>123,'key3'=>'value'); + * echo CJavaScript::encode($options); + * // The following javascript code would be generated: + * // {'key1':true,'key2':123,'key3':'value'} + * </pre> + * + * For highly complex data structures use {@link jsonEncode} and {@link jsonDecode} + * to serialize and unserialize. + * + * @param mixed $value PHP variable to be encoded + * @return string the encoded string + */ + public static function encode($value) + { + if(is_string($value)) + { + if(strpos($value,'js:')===0) + return substr($value,3); + else + return "'".self::quote($value)."'"; + } + else if($value===null) + return 'null'; + else if(is_bool($value)) + return $value?'true':'false'; + else if(is_integer($value)) + return "$value"; + else if(is_float($value)) + { + if($value===-INF) + return 'Number.NEGATIVE_INFINITY'; + else if($value===INF) + return 'Number.POSITIVE_INFINITY'; + else + return rtrim(sprintf('%.16F',$value),'0'); // locale-independent representation + } + else if(is_object($value)) + return self::encode(get_object_vars($value)); + else if(is_array($value)) + { + $es=array(); + if(($n=count($value))>0 && array_keys($value)!==range(0,$n-1)) + { + foreach($value as $k=>$v) + $es[]="'".self::quote($k)."':".self::encode($v); + return '{'.implode(',',$es).'}'; + } + else + { + foreach($value as $v) + $es[]=self::encode($v); + return '['.implode(',',$es).']'; + } + } + else + return ''; + } + + /** + * Returns the JSON representation of the PHP data. + * @param mixed $data the data to be encoded + * @return string the JSON representation of the PHP data. + */ + public static function jsonEncode($data) + { + return CJSON::encode($data); + } + + /** + * Decodes a JSON string. + * @param string $data the data to be decoded + * @param boolean $useArray whether to use associative array to represent object data + * @return mixed the decoded PHP data + */ + public static function jsonDecode($data,$useArray=true) + { + return CJSON::decode($data,$useArray); + } +} |
