Написать программку кто возьмется?

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ну, у нас данные в utf-8 приходят, теоретически проблема может быть на старых серверах в однобайтовой кодировке
к сожалению, в наличии таковых нет для проверки
 

Тугай

Новичок
Cтандартная fgetcsv известно, что глючная. Она работает нормально только в ascii и символами 1-127.

Вот один из вариантов замены, которая работает:
Код:
	function fget_csv($f, $length, $d=",", $q='"') {
		$list = array();
		$st = fgets($f, $length);
		if ($st === false || $st === null) return $st;
		while ($st !== "" && $st !== false) {
			if ($st[0] !== $q) {
				# Non-quoted.
				list ($field) = explode($d, $st, 2);
				$st = substr($st, strlen($field)+strlen($d));
			} else {
				# Quoted field.
				$st = substr($st, 1);
				$field = "";
				while (1) {
					# Find until finishing quote (EXCLUDING) or eol (including)
					preg_match("/^((?:[^$q]+|$q$q)*)/sx", $st, $p);
					$part = $p[1];
					$partlen = strlen($part);
					$st = substr($st, strlen($p[0]));
					$field .= str_replace($q.$q, $q, $part);
					if (strlen($st) && $st[0] === $q) {
						# Found finishing quote.
						list ($dummy) = explode($d, $st, 2);
						$st = substr($st, strlen($dummy)+strlen($d));
						break;
					} else {
						# No finishing quote - newline.
						$st = fgets($f, $length);
					}
				}

			}
			$list[] = $field;
		}
		return $list;
	}
 

AmdY

Пью пиво
Команда форума
Тугай
$st[0] и preg_match("/^((?:[^$q]+|$q$q)*)/sx", $st, $p); похоже что твоё решение должно болеть теми же проблемами и неумеет работать с мультибайтными кодировками.
 

Тугай

Новичок
AmdY
Я постоянно обновляю прайсы через csv и пользуюсь этой функцией. У меня она работает. Кода я наткнулся на проблему со стандартной fgetcsv, я нагуглил эту функцию, как именно она рабоает я не вникал.

Можно найти другую или просто попробывать ту что я дал, главное суть проблемы не любовь встроеной к символам не из ascii 0-127. Так где 'USB-adapter' встроеная работает, но где 'USB-адаптер' - стандартная глючит непредсказуемым образом.
 

fixxxer

К.О.
Партнер клуба
нет никакой проблемы распарсить utf8 csv как однобайтовую кодировку, там эти же коды символов нигде больше не встретятся, если у fgetcsv проблемы с utf8 я даже не знаю как они умудрились написать такое.

вот с ucs2 будут проблемы - но я бы в любом случае это решал сначала конвертацией в utf8
 

Тугай

Новичок
Оказывается работа fgetcsv, зависит от того как настроена локаль. Из-за этого и ошибки. Мое утверждение про ascii и 0-127 - оно не совсем точное, просто на хостинге у меня с локалью беда.
Код:
<?php
	header('Content-type: text/html; charset=utf-8');
	if(!setlocale(LC_ALL, 'ru_RU.utf8')) setlocale(LC_ALL, 'en_US.utf8');
	if(setlocale(LC_ALL, 0) == 'C') die('Не поддерживается ни одна из перечисленных локалей (ru_RU.utf8, en_US.utf8)');

	$handle = fopen('php://memory', 'w+');
	fwrite($handle, iconv('CP1251', 'UTF-8', file_get_contents('test.csv')));
	rewind($handle);
	while (($row = fgetcsv($handle, 1000, ';')) !== false) print_r($row);
	fclose($handle);
?>
Если на хостинге нет нужной локали, то остается единственный вариант с своей функцией.
 

Тугай

Новичок
а первую страницу топика (из двух) никак не прочитать? :D
Цена вопроса:
100 грн.

Для написания скрипта, нужна структра таблички в mysql. Уточнить как добраться до xml, через curl (есть какое-то api c докой, нужен пароль тогда если есть) или xml качается тупо из браузера.
 

Эдди

Новичок
В общем, никто не берется сделать программу. Сунулся в специализированную фирму, срок разработки 20 дней.
Эххх. Пойду на фриланс.
 

С.

Продвинутый новичок
Типа 20 дней много? Так твоя объява только здесь уже почти 20 дней висит.
 

Эдди

Новичок
Да. Висит.

Времени не было. Ждал ответа от фирмы.
20 дней для спецов для нескольких десятков строк скрипта?
Да я за 2 дня бы освоил xml и парсил бы в свое удовольствие.
Времени нет.

P.S. Тем более эти спецы зеленоградские уже знакомы с исходным сервером и делали для других фирм примерно похожие модули.
 

Эдди

Новичок
Кто это сказал? Хочешь, чтобы было хорошо, сделай сам.
Я подписываюсь.
 
  • Like
Реакции: craz
Сверху