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); }
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; }