Как выяснилось str_split() c одним параметром нормально работает только с латинскими символами даже в UTF-8, даже установка внутренней кодировки с помощью команды mb_internal_encoding("UTF-8"); не помогает. Версия php 5.2.12
P.S. Выдаётся массив в 1251 кодировке, хотя входные данные в "UTF-8".
Я написал функцию для проверки кодировки БД (в структуре БД таблицы `tovar` после SET есть русские символы), а она всегда говорит, что кодировка нормальная и выводит соответственно правильно, хотя в БД исходник UTF8 (в браузере стоит кодировка UTF8)), что я делаю не так?
if(strstr($col_value,'Титановый')){echo"$col_value<br>\n";return 1;}// echo добавлено для отладки
}
}
}
return0;
}
P.S. Убрал лишнее отрицание и if, всё равно прога работает с точностью до наоборот: при добавлении запроса SET NAMES 'utf8' функция возвращает 0, а иначе 1 .
Не на локальном (Денвер) не на удалённом серверах нет my.ini . Выполнил все 8 запросов, переписал БД, а то в ней тоже был код похожий на исходник utf8.
Если в прогу добавлять запрос: "SET NAMES 'utf8'” или 8 запросов (в первый раз): "set character_set_client='utf8'"; “set character_set_connection='utf8'";"set character_set_results='utf8'";"set character_set_database='utf8'"; "set character_set_server='utf8'"; "set collation_connection='utf8_general_ci'"; "set collation_database='utf8_general_ci'"; “set collation_server='utf8_general_ci'" – делающие все переменные character_set_... и collation_... отличными от 'utf8’ ими самыми. То русские символы кодируются : первый байт - 208 , а 161 - второй байт , а иначе кроме буквы ш как в блокноте. После второго запуска (запросы были впереди программы) 8 запросов (после убирания 8 запросов, опять портится), переменные все полученные по запросам "SHOW VARIABLES LIKE '%collat%'" и "SHOW VARIABLES LIKE '%char%'" становятся нормальными (с utf8), и буква ш стала нормально выводится.
С помощью phpmyadmin сейчас нормальный вид, а с помощью специально написанной программы, которая в 1251 кодировке нормально работала, раньше была вместо ш - ерунда. Кстати в кодировке 1251 всё было и есть в норме, но заказчик попросил. Т.е. каждый раз надо делать настройку таблицы.
Всем спасибо.
Я нигде запрос mysql_query("SET NAMES 'utf8'"); не использовал. При использовании данного запроса, все русские символы кодируются : первый байт - 208 , а 161 - второй байт , а иначе кроме буквы ш, все как в блокноте.
При выводе из БД с установленном ENGINE=MyISAM DEFAULT CHARSET=utf8 , вместо ‘ш’ код utf8 первый байт = 209 второй байт 136 , выдаёт первый байт = 209 второй байт 63 =‘?’, проверено в версиях 5.0.7 (php 5.3.3) и 4.1.25 (php 4.4.9) под разными браузерами. Как с этим бороться?
Простейшая программа , показывающая эту ошибку
Почему-то не работает функция ignore_user_abort позволяющая работать программе записи КЭШ даже ночью, при отключённом браузере (Даже если в php.ini убрать комментарий перед ignore_user_abort = On ,вероятно, устанавливаемый по умолчанию)?
Для программы формирования КЭШа не нужно право работать час в дневное время. Просто до срабатывания по таймауту она делает перезагрузку, следующее время записывается в cache1\sled_time.txt. Время, требуемое для формирования КЭШа 6 минут, а стандартный таймаут = 30 секунд. Как выяснилось, основное время составляет не загрузка картинок от баннеров из Интернета, а проверка есть ли ссылка и если она есть, есть ли картинка в Интернете. Тогда КЭШ должен работать на сервере. Приведённые программы несколько избыточны, так как они служат для отладки.
Начальная: vakuzmenok.narod.ru/time_nach5.p hp и основная: vakuzmenok.narod.ru/runing5.php программа.
Некоторые моменты в программе: В круглосуточной записи на удалённом сервере die() не работает, видно так сконфигурирован сервер. Использование в начале и конце теги HTML, т.к. используются подпрограммы на JavaScript, а без данных тегов они не работают. Сразу после запуска программа проверяет в главной = текущей директории наличие подкаталогов cache1 и cache2, файлов cache1\form_kesh.txt, cache1\time.txt, cache1\close_cache.txt, cache1\sled_time.txt, cache1\statuscache.txt cache1\readcache.txt, cache1\time_nach.txt, которые можно создать пустыми. Если чего-то нет, то остановка и выдаётся соответствующее сообщение. Если встретится файл cache1\stop_runing.txt то программа останавливается.
Работа данной программы проверена под php 5.2.3 (Денвер) и 4.3.9, всё равно функция ignore_user_abort не работает под разными браузерами (пробовал под Лисой, Осликом и Оперой), т.е. работа программы прекращается при закрытии браузера или нажатия клавиши Стоп (остановка видна в браузере (везде кроме Оперы, хотя она там тоже останавливается))(в файл cache1\time.txt перестаёт писаться текущее время, как на локальном, так и на удалённом сервере, а иначе пишется каждые 10 минут).