Beispiel #1
0
    function forSql($value, $maxLength = 0)
    {
        if ($maxLength <= 0 || $maxLength > 2000) {
            $maxLength = 2000;
        }
        $value = substr($value, 0, $maxLength);
        if (\Freetrix\Main\Application::isUtfMode()) {
            // From http://w3.org/International/questions/qa-forms-utf-8.html
            // This one can crash php with segmentation fault on large input data (over 20K)
            // https://bugs.php.net/bug.php?id=60423
            if (preg_match_all('%(
				[\\x00-\\x7E]                        # ASCII
				|[\\xC2-\\xDF][\\x80-\\xBF]            # non-overlong 2-byte
				|\\xE0[\\xA0-\\xBF][\\x80-\\xBF]        # excluding overlongs
				|[\\xE1-\\xEC\\xEE\\xEF][\\x80-\\xBF]{2} # straight 3-byte
				|\\xED[\\x80-\\x9F][\\x80-\\xBF]        # excluding surrogates
				|\\xF0[\\x90-\\xBF][\\x80-\\xBF]{2}     # planes 1-3
				|[\\xF1-\\xF3][\\x80-\\xBF]{3}         # planes 4-15
				|\\xF4[\\x80-\\x8F][\\x80-\\xBF]{2}     # plane 16
			)+%x', $value, $match)) {
                $value = implode(' ', $match[0]);
            } else {
                return '';
            }
            //There is no valid utf at all
        }
        return str_replace("'", "''", $value);
    }
Beispiel #2
0
 public static function convertEncodingToCurrent($string)
 {
     $isUtf8String = self::detectUtf8($string);
     $isUtf8Config = Application::isUtfMode();
     $currentCharset = null;
     $context = Application::getInstance()->getContext();
     if ($context != null) {
         $culture = $context->getCulture();
         if ($culture != null && method_exists($culture, "getCharset")) {
             $currentCharset = $culture->getCharset();
         }
     }
     if ($currentCharset == null) {
         $currentCharset = Configuration::getValue("default_charset");
     }
     if ($currentCharset == null) {
         $currentCharset = "Windows-1251";
     }
     $fromCp = "";
     $toCp = "";
     if ($isUtf8Config && !$isUtf8String) {
         $fromCp = $currentCharset;
         $toCp = "UTF-8";
     } elseif (!$isUtf8Config && $isUtf8String) {
         $fromCp = "UTF-8";
         $toCp = $currentCharset;
     }
     if ($fromCp !== $toCp) {
         $string = self::convertEncoding($string, $fromCp, $toCp);
     }
     return $string;
 }