diff options
| author | Christian Helbling | 2012-04-04 09:25:06 +0000 | 
|---|---|---|
| committer | Christian Helbling | 2012-04-04 09:25:06 +0000 | 
| commit | a0231e4df6f8bfa82451c05998bb349ece764610 (patch) | |
| tree | 6c1d9e76e8a6388fdf7f1d2435f0da082bd7de62 /itjs.class | |
| parent | 1336ce6ac3baacd1cecbf776cfafa81f8d025272 (diff) | |
| parent | 14f1c25b43628013507da706544d5c55cb1bc461 (diff) | |
| download | itools-a0231e4df6f8bfa82451c05998bb349ece764610.tar.gz itools-a0231e4df6f8bfa82451c05998bb349ece764610.tar.bz2 itools-a0231e4df6f8bfa82451c05998bb349ece764610.zip | |
Merged devel-utf8 back into live
Diffstat (limited to 'itjs.class')
| -rw-r--r-- | itjs.class | 23 | 
1 files changed, 16 insertions, 7 deletions
| @@ -23,12 +23,18 @@  class itjs  { +static $charset;  /**   * Send HTTP headers (content-type) to transmit javascript code   */ -function send_headers($charset = 'iso-8859-1') +function send_headers($charset = null)  { +	if (!$charset) +		$charset = ini_get('default_charset') ?: 'iso-8859-1'; + +	self::$charset = $charset; +  	if (!preg_match('/Opera/', $_SERVER['HTTP_USER_AGENT']) && !$_REQUEST['itjs_iframe'])	# text/plain breaks Opera 8.51/Linux and IFrame fallback  		header("Content-Type: text/plain; charset=$charset");	# Berni reported some Firewalls to require this @@ -67,16 +73,17 @@ function serialize($values, $envelope = false)   */  function encode($values)  { -	$texts = ($values === array_values($values)) ? "[]0 " : "{}1\n";	# Numerical or associative array  	static $jskeyword = array("abstract" => 1, "boolean" => 1, "break" => 1, "byte" => 1, "case" => 1, "catch" => 1, "char" => 1, "class" => 1, "const" => 1, "continue" => 1, "debugger" => 1, "default" => 1, "delete" => 1, "do" => 1, "double" => 1, "each" => 1, "else" => 1, "enum" => 1, "export" => 1, "extends" => 1, "false" => 1, "final" => 1, "finally" => 1, "float" => 1, "for" => 1, "function" => 1, "goto" => 1, "if" => 1, "implements" => 1, "import" => 1, "in" => 1, "instanceof" => 1, "int" => 1, "interface" => 1, "long" => 1, "namespace" => 1, "native" => 1, "new" => 1, "null" => 1, "package" => 1, "private" => 1, "protected" => 1, "public" => 1, "return" => 1, "short" => 1, "static" => 1, "super" => 1, "switch" => 1, "synchronized" => 1, "this" => 1, "throw" => 1, "throws" => 1, "transient" => 1, "true" => 1, "try" => 1, "typeof" => 1, "var" => 1, "void" => 1, "volatile" => 1, "while" => 1, "with" => 1, "xml" => 1); -	$result = $texts{0}; +	$charset = self::$charset ?: ini_get('default_charset'); +	$texts = ($values === array_values($values)) ? "[]0 " : "{}1\n";	# Numerical or associative array +	$result = $texts[0];  	foreach ($values as $key => $value)  	{  		$result .= $separator; -		if ($texts{2}) +		if ($texts[2])  		{  			if ($jskeyword[$key] || !preg_match('/^[a-z_]\w*$/i', $key))  				$key = "'$key'"; @@ -91,17 +98,19 @@ function encode($values)  		else if (!is_array($value))  		{  			$quote = (strval(intval($value)) === strval($value)) ? "" : '"'; -			$string = strtr($value, array("\0" => '\\0', "\x84" => '\\"', "\x93" => '\\"',"\x94" => '\\"', '"' => '\\"', "</"=>"<\\/", "\n" => '\\n', "\r" => '\\r', "\t" => '\\t', "\\" => '\\\\')); +			if (strtolower($charset) != "utf-8") +				$value = strtr($value, array("\x84" => '"', "\x93" => '"', "\x94" => '"')); +			$string = strtr($value, array("\0" => '\\0', '"' => '\\"', "</"=>"<\\/", "\n" => '\\n', "\r" => '\\r', "\t" => '\\t', "\\" => '\\\\'));  			$string = $GLOBALS['itjs_defaultconfig']['latin2unicode'] ? preg_replace_callback('/([\xa0-\xff])/', function($m) { return sprintf("\\u%04x", ord($m[1])); }, $string) : $string;  			$result .= $quote . $string . $quote;  		}  		else  			$result .= itjs::encode($value); -		$separator = "," . $texts{3}; +		$separator = "," . $texts[3];  	} -	$result .= $texts{1}; +	$result .= $texts[1];  	return $result;  } |