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";
// php has get_class_methods function that can print class methods
if (is_object($var)) {
// get class methods if $var is object
$aMethods=get_class_methods(get_class($var));
// make sure that $aMethods is array and array is not empty
if (is_array($aMethods) && $aMethods!=array()) {
echo "Object methods:\n";
foreach($aMethods as $method) {
echo '* ' . $method . "\n";
}
}
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.
*
* Function is designed for people that want to use full power of htmlentities() in
* i18n environment.
*
* @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 and 1.4.4
*/
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 range
* 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 strings 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 php mbstring extension
* @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',
'gb18030',
'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. Detection depends on mbstring
* functions. If mbstring does not support tested multibyte charset,
* vanilla string length function is used.
* @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);
// Use mbstring only with listed charsets
$aList_of_mb_charsets=array('utf-8','big5','gb2312','gb18030','euc-jp','euc-cn','euc-tw','euc-kr');
// calculate string length according to charset
if (in_array($charset,$aList_of_mb_charsets) && in_array($charset,sq_mb_list_encodings())) {
$real_length = mb_strlen($str,$charset);
} else {
// own strlen detection code is removed because missing strpos,
// strtoupper and substr implementations break string wrapping.
$real_length=strlen($str);
}
return $real_length;
}
/**
* string padding with multibyte support
*
* @link http://www.php.net/str_pad
* @param string $string original string
* @param integer $width padded string width
* @param string $pad padding symbols
* @param integer $padtype padding type
* (internal php defines, see str_pad() description)
* @param string $charset charset used in original string
* @return string padded string
*/
function sq_str_pad($string, $width, $pad, $padtype, $charset='') {
$charset = strtolower($charset);
$padded_string = '';
switch ($charset) {
case 'utf-8':
case 'big5':
case 'gb2312':
case 'euc-kr':
/*
* all multibyte charsets try to increase width value by
* adding difference between number of bytes and real length
*/
$width = $width - sq_strlen($string,$charset) + strlen($string);
default:
$padded_string=str_pad($string,$width,$pad,$padtype);
}
return $padded_string;
}
/**
* Wrapper that is used to switch between vanilla and multibyte substr
* functions.
* @param string $string
* @param integer $start
* @param integer $length
* @param string $charset
* @return string
* @since 1.5.1
* @link http://www.php.net/substr
* @link http://www.php.net/mb_substr
*/
function sq_substr($string,$start,$length,$charset='auto') {
// use automatic charset detection, if function call asks for it
if ($charset=='auto') {
global $default_charset;
set_my_charset();
$charset=$default_charset;
}
$charset = strtolower($charset);
if (function_exists('mb_internal_encoding') &&
in_array($charset,sq_mb_list_encodings())) {
return mb_substr($string,$start,$length,$charset);
}
// TODO: add mbstring independent code
// use vanilla string functions as last option
return substr($string,$start,$length);
}
/**
* Wrapper that is used to switch between vanilla and multibyte strpos
* functions.
* @param string $haystack
* @param mixed $needle
* @param integer $offset
* @param string $charset
* @return string
* @since 1.5.1
* @link http://www.php.net/strpos
* @link http://www.php.net/mb_strpos
*/
function sq_strpos($haystack,$needle,$offset,$charset='auto') {
// use automatic charset detection, if function call asks for it
if ($charset=='auto') {
global $default_charset;
set_my_charset();
$charset=$default_charset;
}
$charset = strtolower($charset);
if (function_exists('mb_internal_encoding') &&
in_array($charset,sq_mb_list_encodings())) {
return mb_strpos($haystack,$needle,$offset,$charset);
}
// TODO: add mbstring independent code
// use vanilla string functions as last option
return strpos($haystack,$needle,$offset);
}
/**
* Wrapper that is used to switch between vanilla and multibyte strtoupper
* functions.
* @param string $string
* @param string $charset
* @return string
* @since 1.5.1
* @link http://www.php.net/strtoupper
* @link http://www.php.net/mb_strtoupper
*/
function sq_strtoupper($string,$charset='auto') {
// use automatic charset detection, if function call asks for it
if ($charset=='auto') {
global $default_charset;
set_my_charset();
$charset=$default_charset;
}
$charset = strtolower($charset);
if (function_exists('mb_strtoupper') &&
in_array($charset,sq_mb_list_encodings())) {
return mb_strtoupper($string,$charset);
}
// TODO: add mbstring independent code
// use vanilla string functions as last option
return strtoupper($string);
}
$PHP_SELF = php_self();
?>