Jump to content
  • 0

Новости неправильно отображаются на сайте (проблема с кодировкой)


antonP
 Share

Question

Добрый день. :lol:

Появился у меня один клиент со своим сайтом: salon26.ru, и сразу появились проблемы с этим сайтом, В общем описываю суть проблемы...

Новости неправильно отображаются на сайте (по моему проблема с кодировкой), причём даже если я создаю новую новость она тоже отображается вопросами. Отсюда вопрос

Какая это может быть кодировка? или же проблема в чёмто другом ?

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Вот я тут покавырялся, и вот что нашёл ...

Таблица в БД с новостями почемуто в отличии от остальных таблиц имеет кодировку latin1:

CREATE TABLE IF NOT EXISTS `amg_news` (
`id` int(3) NOT NULL auto_increment,
`modul_id` varchar(255) NOT NULL,
`time` datetime NOT NULL,
`header` varchar(255) NOT NULL,
`announce` tinytext NOT NULL,
`text` text NOT NULL,
`vis` enum('0','1') NOT NULL default '0',
`hide` enum('0','1') NOT NULL default '0',
`author` varchar(255) NOT NULL,
`source_url` tinytext NOT NULL,
`source_name` varchar(255) NOT NULL,
`picture` varchar(255) NOT NULL,
`post_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12;

Я её решил исправить на ту которая стоит у всех остальных - cp1251. Я взял и в phpMyAdmin исправил у этой (новосной) таблицы кодировку на cp1251, новости всёравно остались вопросами, но опять при экспорте этой таблицы я заметил что сами ячейки всёравно принимают кодировку latin1:

CREATE TABLE IF NOT EXISTS `amg_news` (
`id` int(3) NOT NULL auto_increment,
`modul_id` varchar(255) character set latin1 NOT NULL,
`time` datetime NOT NULL,
`header` varchar(255) character set latin1 NOT NULL,
`announce` tinytext character set latin1 NOT NULL,
`text` text character set latin1 NOT NULL,
`vis` enum('0','1') character set latin1 NOT NULL default '0',
`hide` enum('0','1') character set latin1 NOT NULL default '0',
`author` varchar(255) character set latin1 NOT NULL,
`source_url` tinytext character set latin1 NOT NULL,
`source_name` varchar(255) character set latin1 NOT NULL,
`picture` varchar(255) character set latin1 NOT NULL,
`post_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=13;

Теперь вопрос:

Как теперь мне сделать так чтобы и ячейки в таблице приняли кодировку cp1251

Link to comment
Share on other sites

  • 0
CREATE TABLE `amg_news` (													
`id` int(3) NOT NULL auto_increment,
`modul_id` varchar(255) NOT NULL,
`time` datetime NOT NULL,
`header` varchar(255) NOT NULL,
`announce` tinytext NOT NULL,
`text` text NOT NULL,
`vis` enum('0','1') NOT NULL default '0',
`hide` enum('0','1') NOT NULL default '0',
`author` varchar(255) NOT NULL,
`source_url` tinytext NOT NULL,
`source_name` varchar(255) NOT NULL,
`picture` varchar(255) NOT NULL,
`post_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=cp1251

Link to comment
Share on other sites

  • 0

Да СПС с кодировкой всё теперь понятно...

Есть другой вопросик: на внутренних страницах сайт выдаёт ошибки вот: /newsitem.html?newsid=13 Что это может быть за ошибки? Если есть варианты пишите...

Edited by antonP
Link to comment
Share on other sites

  • 0

Догадок куча, их можно долго перебирать сами смотрите:

Notice: Undefined index: newsid in /home/salon26/public_html/modules/news/news.class.php on line 39

Не определён индекс newsid переменной смотри конкретнее в 39 строке файла news.class.php

Warning: Invalid argument supplied for foreach() in /home/salon26/public_html/modules/news/news.class.php on line 46

Тут пропущен (или указана несуществующая переменная) аргумент в функции foreach() , опять-таки смотри фаил news.class.php строка 46

Link to comment
Share on other sites

  • 0

Спасибо что хоть Вы LunatiK что то подсказываете... и то помощь...

С PHP у меня очень туго, поэтому кидаю часть кода от файла news.class.php который как я понимаю отвечает за формирование полной новости.

Я коментариями выделили те строки на которые показывает ошибку синтаксис

	function pub_news_fulltext($fulltext_template)
{
global $kernel;

$my_get = $kernel->pub_httpget_get();

$this->parse_template($fulltext_template);

// $id = $kernel->pub_httpget_get();
$id = $my_get['newsid']; // это и есть 39 строка
$sql = "SELECT *, date_format(time, '%d.%m.%y') AS time FROM ".PREFIX."_news WHERE id='$id'";
$data = mysql_fetch_assoc($kernel->runSQL($sql));

$html = $this->template_array['begin'];
$html .= $this->template_array['end'];

foreach ($data AS $key => $value) // а это 46 строка с ошибкой
{
// $kernel->debug($data);
$html = str_replace("%".$key."%", $value, $html);
}
// $html = str_replace("%Time%", $data['time'], $html);
// $html = str_replace("%header%", $data['header'], $html);
// $html = str_replace("%text%", $data['text'], $html);

return $html;
}

Link to comment
Share on other sites

  • 0

по-видимому в $my_get = $kernel->pub_httpget_get(); записывается или не записывает то, что, как нам кажется, долно записываться

нужно псмотреть что же там вообще есть (после выполнения функции pub_httpget_get()):

Echo "<pre>"; print_r($my_get); Echo "</pre>";

Link to comment
Share on other sites

  • 0

Ну вот чтото выводит, :lol: вставил, посмотрите позалуйста ....

Ещё раз вот ссылка на новость http://www.salon26.ru/newsitem.html?newsid=13

(Для большей ясности) я воткнул эты строку между этими двумя :

		$my_get = $kernel->pub_httpget_get();

$this->parse_template($fulltext_template);

Edited by antonP
Link to comment
Share on other sites

  • 0
Ну, теперь ты видишь что в этом массиве нет newsid от этого все беды

тоесть получается в newsid должно что то передоваться чтобы всё прекрасно заработало, а можно сделать так чтобы прям в этой части кода задать этому "элементу" или "индексу" какоето значение или допустим число, чтобы точно узнать что это из-за него ?

Что можно вписать суда (если не трудно подскажите)?

Теперьт я сделал так:

		$my_get = $kernel->pub_httpget_get();
$newsid[321]="qqq";
Echo "<pre>"; print_r($my_get); Echo "</pre>";

Теперь он ругается на следующую строчку....

Notice: Undefined index: newsid in /home/salon26/public_html/modules/news/news.class.php on line 40

		$sql = "SELECT *, date_format(time, '%d.%m.%y') AS time FROM ".PREFIX."_news WHERE id='$id'";

Получается (насколько я понимаю) этот скрипт просто не видит в базе этих переменных почемуто ....

В правильном направлении ли я мыслю LunatiK :lol: (плиз скажите да нет)?

Edited by antonP
Link to comment
Share on other sites

  • 0

Ошибки теперь не выводятся, но и контент почемуто не выводится... А почему, я вообще непонимаю... главное никто ничего не менял, не лазил, а новости на сайте не работают. :)

Вопрос: Можно ли проверить подключается ли скрипт к БД?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy