<?php
/**
 * Convert string to Unicode HTML entities where necessary
 * @param string $str Input string
 * @return string Converted string
 */
function unicode($str) {
    if (empty($str)) {
        return '';
    }
    
    $unicode = '';
    $prevType = '';
    
    for ($i = 0; $i < mb_strlen($str); $i++) {
        $c = mb_substr($str, $i, 1);
        $j = mb_ord($c);
        
        if ($j < 0) {
            $j += 65536;
        }
        
        if ($j >= 0 && $j <= 128) {
            if ($prevType === 'c') {
                $unicode .= ' ';
                $prevType = 'e';
            }
            $unicode .= $c;
        } else {
            if ($prevType === 'e') {
                $unicode .= ' ';
                $prevType = 'c';
            }
            $unicode .= '&#' . $j . ';';
        }
    }
    
    return $unicode;
}

/**
 * Cut string into lines with specified length
 * @param string $str Input string
 * @param int $lineLen Line length
 * @return string Formatted string
 */
function cutline($str, $lineLen) {
    $result = '';
    $j = 0;
    
    for ($i = 0; $i < mb_strlen($str); $i++) {
        $c = mb_substr($str, $i, 1);
        $ascii = ord($c);
        
        if ($ascii < 0 || $ascii > 127) {
            $k = 2;
        } else {
            if ($ascii < 32) {
                $k = 0;
                if ($ascii === 13) {
                    $j = 0;
                    $result .= "<br/>" . $c;
                    $c = '';
                }
            } else {
                $k = 1;
            }
        }
        
        $j += $k;
        if ($j > $lineLen * 2) {
            $result .= "<br/>\n" . $c;
            $j = $k;
        } else {
            $result .= $c;
        }
    }
    
    return $result;
}

/**
 * Convert special symbols to HTML entities
 * @param string $sStr Input string
 * @return string Converted string
 */
function convertsymbol($sStr) {
    $result = '';
    
    for ($i = 0; $i < strlen($sStr); $i++) {
        $c = $sStr[$i];
        switch ($c) {
            case '>':
                $result .= '&gt;';
                break;
            case '<':
                $result .= '&lt;';
                break;
            case "'":
                $result .= '&apos;';
                break;
            case '"':
                $result .= '&quot;';
                break;
            case '&':
                $result .= '&amp;';
                break;
            case '$':
                $result .= '$$';
                break;
            default:
                $result .= $c;
        }
    }
    
    return $result;
}

/**
 * Convert string to lowercase alphanumeric only
 * @param string $sStr Input string
 * @return string Converted string
 */
function convertstring($sStr) {
    $result = '';
    
    for ($i = 0; $i < mb_strlen($sStr); $i++) {
        $c = mb_substr($sStr, $i, 1);
        $ascTemp = mb_ord($c);
        
        if (($ascTemp > 47 && $ascTemp < 58) || 
            ($ascTemp > 64 && $ascTemp < 91) || 
            ($ascTemp > 96 && $ascTemp < 123)) {
            $result .= $c;
        }
    }
    
    return strtolower($result);
}