Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите в борьбе с краказяблами
 
 автор: m@rchello   (19.06.2008 в 14:22)   письмо автору
 
 

Дорого времени суток .....

Просто незнаю как с этими краказяблами уже бороться ....
Сайт работает на utf8
всё впринципе работает но вот в тегах(формируются из поисковых запросов на сайте) почему то постоянно появляются кракозяблы .... причём я когда добавляю то их нет .....:(
помогите разобраться ..... очень нужно ...... уже устал бороться ....=(
ссылка посмотреть http://newspile.ru

   
 
 автор: mihdan   (19.06.2008 в 14:39)   письмо автору
 
   для: m@rchello   (19.06.2008 в 14:22)
 

Данные в таблице mysql в какой кодировке

   
 
 автор: m@rchello   (19.06.2008 в 14:52)   письмо автору
 
   для: mihdan   (19.06.2008 в 14:39)
 

utf8 так же как и все остальные которые вы видите ..... новости и тд, файлы тоже в utf-8

   
 
 автор: amigo62   (19.06.2008 в 15:03)   письмо автору
 
   для: m@rchello   (19.06.2008 в 14:52)
 

в принципе так и длжно быть, ведь запросы приходят в win-1251 кодировке. Их нужно перекодировать перед выводом. iconv(); пробовали?
кстати, я смотрю, у Вас скрипт новости обрезает некорректно, байт в конце остается. Так что, почитайте о функциях iconv и mb_substr, не пожалеете:)

   
 
 автор: Trianon   (19.06.2008 в 15:35)   письмо автору
 
   для: amigo62   (19.06.2008 в 15:03)
 

>в принципе так и длжно быть, ведь запросы приходят в win-1251 кодировке.

Почему Вы так решили?

   
 
 автор: amigo62   (19.06.2008 в 16:32)   письмо автору
 
   для: Trianon   (19.06.2008 в 15:35)
 

Как минимум потому, что данная тема имеет место быть:))))

   
 
 автор: Trianon   (19.06.2008 в 17:05)   письмо автору
 
   для: amigo62   (19.06.2008 в 16:32)
 

Читайте внимательнее:
Сайт работает на utf8
всё впринципе работает 

какая тут к фигам 1251?

   
 
 автор: amigo62   (19.06.2008 в 17:21)   письмо автору
 
   для: Trianon   (19.06.2008 в 17:05)
 

а внизу что??? или, может, дизайнер для красоты эти закорючки приписал? ЛОЛ

   
 
 автор: BinLaden   (19.06.2008 в 17:32)   письмо автору
 
   для: amigo62   (19.06.2008 в 17:21)
 

> а внизу что???

А что там у Вас внизу нам по барабану:) Вы тут сказали, что запросы приходят в windows-1251 - это чистейшая глупость, потому что объявлена кодировка UTF-8 - и в ней и будут приходить запросы.

Adios, amigo:))

   
 
 автор: m@rchello   (19.06.2008 в 19:04)   письмо автору
 
   для: BinLaden   (19.06.2008 в 17:32)
 

Повторю ещё разок
кадировка файлов utf8
Кодировка базы utf8
мета заголовок (HTML) utf8
+ в php header('Content-type:text/html; charset=utf-8');


Потому то я тему и создал что непонятно откуда эти кракозяблы и как с ними бороться ...=(
Возможно кто подскажет как фильтр сделать или возможно регулярка как то сможет помочь. ....
Есть какие то размышления?

   
 
 автор: mihdan   (19.06.2008 в 19:05)   письмо автору
 
   для: m@rchello   (19.06.2008 в 19:04)
 

Скрипт поиска покажите, возможно причина кроется там, потому как ничего другого не наблюдаю

   
 
 автор: m@rchello   (19.06.2008 в 19:13)   письмо автору
 
   для: mihdan   (19.06.2008 в 19:05)
 


function add_tag($tag)
{

  if (strlen($tag)>=3 && strlen($tag)<=30)
    {

        $sql = "SELECT `id` FROM `m_tags` WHERE `tag`='" . $tag . "'";
        $query = mysql_query($sql) or die(mysql_error());
        if (!mysql_num_rows($query))
        {
            $sql = "INSERT INTO `m_tags` (`tag`) VALUES ('" . $tag . "')";
            $query = mysql_query($sql) or die(mysql_error());
        } else
        {
            $sql = "UPDATE `m_tags` SET `rating`=(`rating`+1) WHERE `tag`='" . $tag . "'";
            $query = mysql_query($sql) or die(mysql_error());
        }
    }
}


Это код добавления тега .... перед этим предложение введённое в поле поиска разбивается по словам ...


$words = explode(' ', $search);//где $search это наш поисковый запрос

   
 
 автор: Trianon   (19.06.2008 в 19:19)   письмо автору
 
   для: m@rchello   (19.06.2008 в 19:13)
 

а запрос-то откуда берем?

   
 
 автор: m@rchello   (20.06.2008 в 17:19)   письмо автору
 
   для: Trianon   (19.06.2008 в 19:19)
 

$search = $_GET['search'];

   
 
 автор: mihdan   (20.06.2008 в 17:41)   письмо автору
 
   для: m@rchello   (20.06.2008 в 17:19)
 

$search = $_GET['search']; конвертируете в UTF-8???

   
 
 автор: Trianon   (20.06.2008 в 17:42)   письмо автору
 
   для: m@rchello   (20.06.2008 в 17:19)
 

В переменную $_GET['search'] текст попадает из поля формы некоторой страницы.
Эта страница (с формой) в кодировке utf-8?

[поправлено модератором]

   
 
 автор: m@rchello   (20.06.2008 в 18:27)   письмо автору
 
   для: Trianon   (20.06.2008 в 17:42)
 

Конвертировать в utf-8 - нет не конвертирую.......

Страничка с формой в utf-8 ....... там всё в utf-8 ...... в форме поиска ОДНО поле search ....
Форма передаётся методом GET ......

принимаем данные


$search = @$_GET['search'];

$words = explode(' ', $search);

for($i=0;$i<count($words);$i++)
    add_tag($words[$i]);

function add_tag($tag) 


  if (strlen($tag)>=3 && strlen($tag)<=30) 
    { 

        $sql = "SELECT `id` FROM `m_tags` WHERE `tag`='" . $tag . "'"; 
        $query = mysql_query($sql) or die(mysql_error()); 
        if (!mysql_num_rows($query)) 
        { 
            $sql = "INSERT INTO `m_tags` (`tag`) VALUES ('" . $tag . "')"; 
            $query = mysql_query($sql) or die(mysql_error()); 
        } else 
        { 
            $sql = "UPDATE `m_tags` SET `rating`=(`rating`+1) WHERE `tag`='" . $tag . "'"; 
            $query = mysql_query($sql) or die(mysql_error()); 
        } 
    } 
}


вот так вот .....

   
 
 автор: Trianon   (20.06.2008 в 19:51)   письмо автору
 
   для: m@rchello   (20.06.2008 в 18:27)
 

Что не конвертируете - правильно.
Методика добавления у Вас крайне тормозная, но без особых ляпов.
Из-за отсутствия экранирования конечно существует нарушение работы на кавычках и обратных слэшах, уязвимость SQL-injection, (как минимум при выключенных magic quotes), но такой эффект, как у Вас, это всё давать не должно.
А если прямо перед добавлением влепить отладочный вывод:
        if (!mysql_num_rows($query)) 
        { 
            echo "New tag: $tag<br>\r\n";
            $sql = "INSERT INTO `m_tags` (`tag`) VALUES ('" . $tag . "')"; 

то в нем тоже кракозябры ползут?


Вы говорите, что страница с формой у Вас в utf-8.
Там стоит header("Content-type: text/html ; charset=utf-8"); ?

   
 
 автор: m@rchello   (24.06.2008 в 14:07)   письмо автору
 
   для: Trianon   (20.06.2008 в 19:51)
 

Да header("Content-type: text/html ; charset=utf-8"); это есть .......
Отладочный вывод уже делал ...... и когда я сам записи добавляю ...... всё работает норм и русские и английские символы ...... но если я сам добавляю кракозябры, то само сабой эти же кракозябры и остаются ....

А возможно ли отследить добавление кракозяблов?
Тоесть допустим разрешить добавление только русских (чистых), латинских символов знака "-" и цифр?

что касается SQL-injection, не досмотрел ...... закрыл mysql_escape_string()

   
 
 автор: Trianon   (24.06.2008 в 18:33)   письмо автору
 
   для: m@rchello   (24.06.2008 в 14:07)
 

>Да header("Content-type: text/html ; charset=utf-8"); это есть .......
>Отладочный вывод уже делал ...... и когда я сам записи добавляю ...... всё работает норм и русские и английские символы ......

То есть всё работает.

>но если я сам добавляю кракозябры, то само сабой эти же кракозябры и остаются ....

Так а что Вы хотите?
Вы добавляете слово - оно добавляется. Цензуре эти слова Ваш скрипт не подвергает.

   
 
 автор: m@rchello   (24.06.2008 в 19:05)   письмо автору
 
   для: Trianon   (24.06.2008 в 18:33)
 

>>но если я сам добавляю кракозябры, то само сабой эти же кракозябры и остаются ....
>
>Так а что Вы хотите?
>Вы добавляете слово - оно добавляется. Цензуре эти слова Ваш скрипт не подвергает.

это и так понятно ..... потому то я и спрашиваю как отследить символы!?=(

   
 
 автор: Trianon   (24.06.2008 в 19:17)   письмо автору
 
   для: m@rchello   (24.06.2008 в 19:05)
 

определить критерий, который бы позволил отличить плохие слова от хороших.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования