Проблема с Mysql и кодировкой

valoook

Новичок
Здравствуйте, возникла проблема с кодировкой при вставке в таблицу. Данные получаю из excel файла.
Кодировка в файле(php) UTF-8 данные после парсинга все в кирилице в базе и таблице UTF-8. Мучаюсь 2ой день, испробовал много способов. Гугл не помог.
Помогите если кто сталкивался с проблемой. Сайт на CMS Joomla стоит.
PHP:
<html>
<head>
<STYLE>
<!--
body, table, tr, td {font-size: 12px; font-family: Verdana, MS sans serif, Arial, Helvetica, sans-serif}
td.index {font-size: 10px; color: #000000; font-weight: bold}
td.empty {font-size: 10px; color: #000000; font-weight: bold}
td.dt_string {font-size: 10px; color: #000090; font-weight: bold}
td.dt_int {font-size: 10px; color: #909000; font-weight: bold}
td.dt_float {font-size: 10px; color: #007000; font-weight: bold}
td.dt_date  {font-size: 10px; color: #008080; font-weight: bold}
td.dt_unknown {font-size: 10px; background-color: #f0d0d0; font-weight: bold}
td.empty {font-size: 10px; background-color: #f0f0f0; font-weight: bold}
-->
</STYLE>
</head>
<body bgcolor="#ffffff" text="#000000" topmargin="0" leftmargin="10" marginwidth="0" marginheight="0" link="#000000" vlink="#000000" alink="#000000">

<table width="100%" bgcolor="#006699">
<tr>
	<td>&nbsp;</td>
	<td><font size="+3" color="#FFFFFF">ABC Excel Parser Pro</font></td>
	<td>&nbsp;</td>
</tr>
</table>

<p>&nbsp;</p>

<?php echo get_magic_quotes_gpc();
////td.dt_string {font-size: 10px; color: #000090; font-weight: bold}

include ("../../excel.php");
function getmicrotime() {
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}

function uc2html($str) {
	$ret = '';
	for( $i=0; $i<strlen($str)/2; $i++ ) {
		$charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
		$ret .= '&#'.$charcode;
	}
	return $ret;
}

function show_time() {
	global $time_start,$time_end;

	$time = $time_end - $time_start;
	echo "Анализ сделан за $time секунды<hr size=1><br>";
}

function fatal($msg = '') {
	echo '[Fatal error]';
	if( strlen($msg) > 0 )
		echo ": $msg";
	echo "<br>\nВыполнение Скрипта прервано <br>\n";
	if( $f_opened) @fclose($fh);
	exit();
};

$err_corr = "Неподдерживаемый формат или битый файл";

$excel_file_size;
$excel_file = $_FILES['excel_file'];
if( $excel_file )
	$excel_file = $_FILES['excel_file']['tmp_name'];

if( $excel_file == '' ) fatal("Файл не загружен");

$exc = new ExcelFileParser("debug.log", ABC_NO_LOG );//ABC_VAR_DUMP);

$style = $_POST['style'];
if( $style == 'old' )
{
	$fh = @fopen ($excel_file,'rb');
	if( !$fh ) fatal("Файл не загружен");
	if( filesize($excel_file)==0 ) fatal("Файл не загружен");
	$fc = fread( $fh, filesize($excel_file) );
	@fclose($fh);
	if( strlen($fc) < filesize($excel_file) )
		fatal("Немогу прочитать файл");
		
	$time_start = getmicrotime();
	$res = $exc->ParseFromString($fc);
	$time_end = getmicrotime();
}
elseif( $style == 'segment' )
{
	$time_start = getmicrotime();
	$res = $exc->ParseFromFile($excel_file);
	$time_end = getmicrotime();
}

switch ($res) {
	case 0: break;
	case 1: fatal("Невозможно открыть файл");
	case 2: fatal("Файл, слишком маленький чтобы быть файлом Excel");
	case 3: fatal("Ошибка чтения заголовка файла");
	case 4: fatal("Ошибка чтения файла");
	case 5: fatal("Это - не файл Excel или файл, сохраненный в Excel < 5.0");
	case 6: fatal("Битый файл");
	case 7: fatal("В файле не найдены данные  Excel");
	case 8: fatal("Неподдерживаемая версия файла");

	default:
		fatal("Неизвестная ошибка");
}

/*
print '<pre>';
print_r( $exc );
print '</pre>';
exit;
*/

show_time();


	for( $ws_num=0; $ws_num<count($exc->worksheet['name']); $ws_num++ )
	{
		print "<b>Рабочий лист: \"";
		if( $exc->worksheet['unicode'][$ws_num] ) {
			print uc2html($exc->worksheet['name'][$ws_num]);
		} else
			print $exc->worksheet['name'][$ws_num];

		print "\"</b>";
		$ws = $exc->worksheet['data'][$ws_num];

		if( is_array($ws) &&
		    isset($ws['max_row']) && isset($ws['max_col']) ) {
		 echo "\n<br><br>\n";
$toAddArray = array();
			$pre_query = 'INSERT INTO `hjexy_STE_items` (`it_name`, `it_color`, `it_size`, `it_number`) VALUES'; 
			
		 for( $j=0; $j<=$ws['max_col']; $j++ ) {
			if( $j>25 ) print chr((int)($j/26)+64);
			print chr(($j % 26) + 65)."&nbsp;";
		 }

		 for( $i=1; $i<=$ws['max_row']; $i++ ) {
		  if(isset($ws['cell'][$i]) && is_array($ws['cell'][$i]) ) {
		    $toAddArray[$i] = '(';
		   for( $j=0; $j<=$ws['max_col']; $j++ ) {

			if( ( is_array($ws['cell'][$i]) ) &&
			    ( isset($ws['cell'][$i][$j]) )
			   ){

			 // Печать данных ячейки
			 $data = $ws['cell'][$i][$j];

			 $font = $ws['cell'][$i][$j]['font'];
			 //$style = " style ='".ExcelFont::ExcelToCSS($exc->fonts[$font])."'";
			
			 if ($j == $ws['max_col']) 
			 {
			    $endValue = ')';
			 }
			 else 
			 {
				$endValue = ', ';
				
			 }
			 
			switch ($data['type']) {
			// строка
			case 0:
				$ind = $data['data'];
				if( $exc->sst['unicode'][$ind] ) {
					$s = uc2html($exc->sst['data'][$ind]);
				} else
					$s = $exc->sst['data'][$ind];
				if( strlen(trim($s))==0 )
					print "&nbsp;";
				else
					print $s;
					$toAddArray[$i] = $toAddArray[$i].'\''.$s.'\''.$endValue;
				
				break;
			//целое число
			case 1:
				print "dt_int\"".$style.">";
				print (int)($data['data']);
				break;
			//вещественное число
			case 2:
				print " ";
				print (float)/*(*/$data['data']/*)*/;
				$toAddArray[$i] = $toAddArray[$i].$data['data'].$endValue;
				break;
			// дата
			case 3:
				print "dt_date\"".$style.">";

				$ret = $exc->getDateArray($data['data']);
				printf ("%s-%s-%s",$ret['day'], $ret['month'], $ret['year']);
				break;
			default:
				print "dt_unknown\"".$style."> &nbsp;";
				break;
		   }
		   
			 
			} else {
				
			}
		   }
		   echo $toAddArray[1];
		  } else {
			// печать пустой записи
			//for( $j=0; $j<=$ws['max_col']; $j++ )
			//	print &nbsp;
			print "\n";
		  }
		 }

		 echo "</table><br>\n";
		} else {
			// пустой рабочий лист
			print "<b> - Пусто</b><br>\n";
		}
		print "<br>";
	}

/*	print "Форматы<br>";
	foreach($exc->format as $value) {
		printf("( %x )",array_search($value,$exc->format));
		print htmlentities($value,ENT_QUOTES);
		print "<br>";
	}

    print "XFs<br>";
	for( $i=0;$i<count($exc->xf['format']);$i++) {
		printf ("(%x)",$i);
		printf (" Формат (%x) шрифт (%x)",$exc->xf['format'][$i],$exc->xf['font'][$i]);

		print "<br>";
	}
*/

$sql_s = mysql_connect('localhost', '*******', '****');
mysql_selectdb("*****", $sql_s);
//mysql_query("set names utf8");



for ($k = 0; $k <= count ($toAddArray);$k++)
			{
				$endQuery2 = ', ';
				if (!($k < count ($toAddArray)) || $k == 0)
				{
					$endQuery2 = '';
				}
				
					$pre_query = $pre_query.$toAddArray[$k].$endQuery2;
			}
			//echo count ($toAddArray);
		
			//$pre_query = iconv("UTF-8","cp1251",$pre_query);
			
		//$pre_query = iconv("utf-8", "cp1251", $pre_query);
			//$pre_query = iconv('cp1251', 'utf-8',  $pre_query);
			
			echo $pre_query;			mysql_query($pre_query) or die(mysql_error());
            
			//$res=mysql_query("show variables like 'char%'"); 
			
			mysql_query($ss) or die(mysql_error());
/*mysql_query("set character_set_client='utf-8'"); 
mysql_query ("set character_set_results='cp1251'"); 
mysql_query ("set collation_connection='cp1251_general_ci'");*/

			
?>

<p>&nbsp;</p>

</body>
</html>
 

AmdY

Пью пиво
Команда форума
Я за прошлую неделю кода меньше написал чем в одном этом листинге :(

Из твоего сообщения понятно что ты всё вроде делаешь правильно, но не понятно А В ЧЁМ ПРОБЛЕМА? что не так с кодирочкой?
 

AmdY

Пью пиво
Команда форума
Redjik
нет, проблема как раз в нашем индуском коде, мы сдали проект и второй месяц сидим на багфиксинге. дефекты связанные с айбиэмовским лпагином и проблемами из-за оптимизации. Соответственно основную часть времени проводим в дебаге, уточнении требований, выявлении где ткнуть, а затем проблема решается одной-двумя строчками кода.
был эпичный дефект ie8 only, на фиксинг которого была потрачена человеко неделя, 3 разработчика пробовали решить, а решение было в странном поведении тернарного оператора был вызов метода object.method(arg1, arg2 >0 ? 1: 0), решение заключалось в раставлении скобок object.method(arg1, (arg2 >0 ? 1: 0)). В итоге дефект на 40 часов и несколько тысяч долларов для заказчика, исправлен в одну строчку.
 
Сверху