to be displayed.
* The output is wrapped in <> and <
> tags.
*
* @return void
*/
function sm_print_r() {
ob_start(); // Buffer output
foreach(func_get_args() as $var) {
print_r($var);
echo "\n";
}
$buffer = ob_get_contents(); // Grab the print_r output
ob_end_clean(); // Silently discard the output & stop buffering
print '';
print htmlentities($buffer);
print '
';
}
/**
* version of fwrite which checks for failure
*/
function sq_fwrite($fp, $string) {
// write to file
$count = @fwrite($fp,$string);
// the number of bytes written should be the length of the string
if($count != strlen($string)) {
return FALSE;
}
return $count;
}
/**
* sq_get_html_translation_table
*
* Returns the translation table used by sq_htmlentities()
*
* @param integer $table html translation table. Possible values (without quotes):
*
* - HTML_ENTITIES - full html entities table defined by charset
* - HTML_SPECIALCHARS - html special characters table
*
* @param integer $quote_style quote encoding style. Possible values (without quotes):
*
* - ENT_COMPAT - (default) encode double quotes
* - ENT_NOQUOTES - don't encode double or single quotes
* - ENT_QUOTES - encode double and single quotes
*
* @param string $charset charset used for encoding. default to us-ascii, 'auto' uses $default_charset global value.
* @return array html translation array
*/
function sq_get_html_translation_table($table,$quote_style=ENT_COMPAT,$charset='us-ascii') {
global $default_charset;
if ($table == HTML_SPECIALCHARS) $charset='us-ascii';
// Start array with ampersand
$sq_html_ent_table = array( "&" => '&' );
// < and >
$sq_html_ent_table = array_merge($sq_html_ent_table,
array("<" => '<',
">" => '>')
);
// double quotes
if ($quote_style == ENT_COMPAT)
$sq_html_ent_table = array_merge($sq_html_ent_table,
array("\"" => '"')
);
// double and single quotes
if ($quote_style == ENT_QUOTES)
$sq_html_ent_table = array_merge($sq_html_ent_table,
array("\"" => '"',
"'" => ''')
);
if ($charset=='auto') $charset=$default_charset;
// add entities that depend on charset
switch($charset){
case 'iso-8859-1':
include_once(SM_PATH . 'functions/htmlentities/iso-8859-1.php');
break;
case 'utf-8':
include_once(SM_PATH . 'functions/htmlentities/utf-8.php');
break;
case 'us-ascii':
default:
break;
}
// return table
return $sq_html_ent_table;
}
/**
* sq_htmlentities
*
* Convert all applicable characters to HTML entities.
* Minimal php requirement - v.4.0.5
*
* @param string $string string that has to be sanitized
* @param integer $quote_style quote encoding style. Possible values (without quotes):
*
* - ENT_COMPAT - (default) encode double quotes
* - ENT_NOQUOTES - don't encode double or single quotes
* - ENT_QUOTES - encode double and single quotes
*
* @param string $charset charset used for encoding. defaults to 'us-ascii', 'auto' uses $default_charset global value.
* @return string sanitized string
*/
function sq_htmlentities($string,$quote_style=ENT_COMPAT,$charset='us-ascii') {
// get translation table
$sq_html_ent_table=sq_get_html_translation_table(HTML_ENTITIES,$quote_style,$charset);
// convert characters
return str_replace(array_keys($sq_html_ent_table),array_values($sq_html_ent_table),$string);
}
/**
* Tests if string contains 8bit symbols.
*
* If charset is not set, function defaults to default_charset.
* $default_charset global must be set correctly if $charset is
* not used.
* @param string $string tested string
* @param string $charset charset used in a string
* @return bool true if 8bit symbols are detected
* @since 1.5.1
*/
function sq_is8bit($string,$charset='') {
global $default_charset;
if ($charset=='') $charset=$default_charset;
/**
* Don't use \240 in ranges. Sometimes RH 7.2 doesn't like it.
* Don't use \200-\237 for iso-8859-x charsets. This ranges
* stores control symbols in those charsets.
* Use preg_match instead of ereg in order to avoid problems
* with mbstring overloading
*/
if (preg_match("/^iso-8859/i",$charset)) {
$needle='/\240|[\241-\377]/';
} else {
$needle='/[\200-\237]|\240|[\241-\377]/';
}
return preg_match("$needle",$string);
}
/**
* Replacement of mb_list_encodings function
*
* This function provides replacement for function that is available only
* in php 5.x. Function does not test all mbstring encodings. Only the ones
* that might be used in SM translations.
*
* Supported arrays are stored in session in order to reduce number of
* mb_internal_encoding function calls.
*
* If you want to test all mbstring encodings - fill $list_of_encodings
* array.
* @return array list of encodings supported by mbstring
* @since 1.5.1
*/
function sq_mb_list_encodings() {
if (! function_exists('mb_internal_encoding'))
return array();
// don't try to test encodings, if they are already stored in session
if (sqgetGlobalVar('mb_supported_encodings',$mb_supported_encodings,SQ_SESSION))
return $mb_supported_encodings;
// save original encoding
$orig_encoding=mb_internal_encoding();
$list_of_encoding=array(
'pass',
'auto',
'ascii',
'jis',
'utf-8',
'sjis',
'euc-jp',
'iso-8859-1',
'iso-8859-2',
'iso-8859-7',
'iso-8859-9',
'iso-8859-15',
'koi8-r',
'koi8-u',
'big5',
'gb2312',
'windows-1251',
'windows-1255',
'windows-1256',
'tis-620',
'iso-2022-jp',
'euc-kr',
'utf7-imap');
$supported_encodings=array();
foreach ($list_of_encoding as $encoding) {
// try setting encodings. suppress warning messages
if (@mb_internal_encoding($encoding))
$supported_encodings[]=$encoding;
}
// restore original encoding
mb_internal_encoding($orig_encoding);
// register list in session
sqsession_register($supported_encodings,'mb_supported_encodings');
return $supported_encodings;
}
/**
* Function returns number of characters in string.
*
* Returned number might be different from number of bytes in string,
* if $charset is multibyte charset. Currently only utf-8 charset is
* supported.
* @param string $str string
* @param string $charset charset
* @since 1.5.1
* @return integer number of characters in string
*/
function sq_strlen($str, $charset=''){
// default option
if ($charset=='') return strlen($str);
// use automatic charset detection, if function call asks for it
if ($charset=='auto') {
global $default_charset;
set_my_charset();
$charset=$default_charset;
}
// lowercase charset name
$charset=strtolower($charset);
// set initial returned length number
$real_length=0;
// calculate string length according to charset
// function can be modulized same way we modulize decode/encode/htmlentities
if ($charset=='utf-8') {
if (function_exists('mb_strlen')) {
$real_length = mb_strlen($str,'utf-8');
} else {
// function needs length of string in bytes.
// mbstring overloading might break it
$str_length=strlen($str);
$str_index=0;
while ($str_index < $str_length) {
// start of utf-8 multibyte character detection
if (preg_match("/[\xC0-\xDF]/",$str[$str_index]) &&
isset($str[$str_index+1]) &&
preg_match("/[\x80-\xBF]/",$str[$str_index+1])) {
// two byte utf-8
$str_index=$str_index+2;
$real_length++;
} elseif (preg_match("/[\xE0-\xEF]/",$str[$str_index]) &&
isset($str[$str_index+2]) &&
preg_match("/[\x80-\xBF][\x80-\xBF]/",$str[$str_index+1].$str[$str_index+2])) {
// three byte utf-8
$str_index=$str_index+3;
$real_length++;
} elseif (preg_match("/[\xF0-\xF7]/",$str[$str_index]) &&
isset($str[$str_index+3]) &&
preg_match("/[\x80-\xBF][\x80-\xBF][\x80-\xBF]/",$str[$str_index+1].$str[$str_index+2].$str[$str_index+3])) {
// four byte utf-8
$str_index=$str_index+4;
$real_length++;
} elseif (preg_match("/[\xF8-\xFB]/",$str[$str_index]) &&
isset($str[$str_index+4]) &&
preg_match("/[\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF]/",
$str[$str_index+1].$str[$str_index+2].$str[$str_index+3].$str[$str_index+4])) {
// five byte utf-8
$str_index=$str_index+5;
$real_length++;
} elseif (preg_match("/[\xFC-\xFD]/",$str[$str_index]) &&
isset($str[$str_index+5]) &&
preg_match("/[\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF]/",
$str[$str_index+1].$str[$str_index+2].$str[$str_index+3].$str[$str_index+4].$str[$str_index+5])) {
// six byte utf-8
$str_index=$str_index+6;
$real_length++;
} else {
$str_index++;
$real_length++;
}
// end of utf-8 multibyte character detection
}
}
// end of utf-8 length detection
} elseif ($charset=='big5') {
// TODO: add big5 string length detection
$real_length=strlen($str);
} elseif ($charset=='gb2312') {
// TODO: add gb2312 string length detection
$real_length=strlen($str);
} elseif ($charset=='gb18030') {
// TODO: add gb18030 string length detection
$real_length=strlen($str);
} elseif ($charset=='euc-jp') {
// TODO: add euc-jp string length detection
$real_length=strlen($str);
} elseif ($charset=='euc-cn') {
// TODO: add euc-cn string length detection
$real_length=strlen($str);
} elseif ($charset=='euc-tw') {
// TODO: add euc-tw string length detection
$real_length=strlen($str);
} elseif ($charset=='euc-kr') {
// TODO: add euc-kr string length detection
$real_length=strlen($str);
} else {
$real_length=strlen($str);
}
return $real_length;
}
$PHP_SELF = php_self();
?>