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

Форум Регулярные Выражения

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

 

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

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

тема: Синонимайзер
 
 автор: rafonets   (05.03.2012 в 16:13)   письмо автору
 
 

Добрый день, нашел базу синонимов, скачал подготовил, написал скрипт на денвере все пашет! Перекинул на хостинг к ihc.ru. Вот такое дело возникло когда пишу preg_replace_callback выдает такую ошибку:

Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'вздор', to be a valid callback in /home/****/www/****/synon/index.php on line 55


Собственно код:

$text = preg_replace( "/\b(" . $word . ")\b/i", $syns, $text );

$word - слово может быть например "а"
$syns - синоним например "однако"
$text - допустим "А может сосиски лучше прожарить?" 
Регистр значения не имеет.


Так вот не пойму почему второй аргумент не хочет работать, может виноваты русские символы? пробовал через iconv, как то не получилось.

Кодировка файла UTF-8, в хтмл шапке тоже.

---
Да кстати при подключении с СУБД так же кодировку назначаю UTF8

  Ответить  
 
 автор: rafonets   (05.03.2012 в 16:21)   письмо автору
 
   для: rafonets   (05.03.2012 в 16:13)
 

Проверил с английскими символами тоже самое

  Ответить  
 
 автор: cheops   (05.03.2012 в 16:30)   письмо автору
 
   для: rafonets   (05.03.2012 в 16:13)
 

Погодите, интерпретатор у вас ругается на preg_replace_callback(), а показываете вы совершенно другую функцию - preg_replace()...

  Ответить  
 
 автор: rafonets   (05.03.2012 в 16:32)   письмо автору
 
   для: cheops   (05.03.2012 в 16:30)
 

ну preg_replace не работал, я где то вычитал что preg_replace_callback показывает статус выполненной работы т.е. ошибки

---
Верно, простите ошибка preg_replace_callback совсем другая функция:

http://www.softtime.ru/dic/id_dic=139&id_group=3


Но все-же почему preg_replace не работает? он на denwer работает

  Ответить  
 
 автор: cheops   (05.03.2012 в 16:37)   письмо автору
 
   для: rafonets   (05.03.2012 в 16:32)
 

>Но все-же почему preg_replace не работает? он на denwer работает
А в чем выражалась "не работа"?

PS Русская локаль настроена?

  Ответить  
 
 автор: rafonets   (05.03.2012 в 16:41)   письмо автору
 
   для: cheops   (05.03.2012 в 16:37)
 

Из примера текст:
А может сосиски лучше прожарить?

В денвер становиться:
однако может сосиски лучше прожарить?

а на хостинге не изменяется. А как можно просмотреть локаль?

  Ответить  
 
 автор: cheops   (05.03.2012 в 16:49)   письмо автору
 
   для: rafonets   (05.03.2012 в 16:41)
 

У вас какая кодировка? Windows-1251? Попробуйте выполнить следующий код
<?php
  $loc_ru 
setlocale(LC_ALL'ru_RU.CP1251''rus_RUS.CP1251''Russian_Russia.1251');
  echo 
"В этой системе русская локаль имеет имя '$loc_ru'";
?>
а в след за ним выполнить ваше регулярное выражение.

  Ответить  
 
 автор: rafonets   (05.03.2012 в 16:55)   письмо автору
 
   для: cheops   (05.03.2012 в 16:49)
 

В моей системе у русской локали нет имени =[

рег. выражение тоже не заработало

  Ответить  
 
 автор: cheops   (05.03.2012 в 17:10)   письмо автору
 
   для: rafonets   (05.03.2012 в 16:55)
 

Попробуйте службу тех.поддержки потрясти этим вопросом, возможно, на сервере какие-то другие порядки работы с русским текстом или локаль как-то хитрее называется/выставляется?

  Ответить  
 
 автор: rafonets   (05.03.2012 в 17:17)   письмо автору
 
   для: cheops   (05.03.2012 в 17:10)
 

ок

  Ответить  
 
 автор: rafonets   (05.03.2012 в 18:14)   письмо автору
 
   для: rafonets   (05.03.2012 в 17:17)
 

Посоветовали использовать локаль ru_RU.utf8, но все равно, preg_replace не заработал

  Ответить  
 
 автор: cheops   (05.03.2012 в 18:17)   письмо автору
 
   для: rafonets   (05.03.2012 в 18:14)
 

С utf8 нужно, чтобы весь ваш текст был в кодировке UTF-8 и скрипт тоже, а в регулярное выражение нужно добавить модификатор u, т.е. вместо
"/\b(" . $word . ")\b/i
писать так
"/\b(" . $word . ")\b/iu

  Ответить  
 
 автор: rafonets   (05.03.2012 в 19:16)   письмо автору
 
   для: cheops   (05.03.2012 в 18:17)
 

Что то мозги у меня не работают, вот весь код, может поможете, что и как тут изменить: (Простите дурака =] )

<?php
  $loc_ru 
setlocale(LC_ALL'ru_RU.utf8''rus_RUS.utf8''Russian_Russia.utf8'); 
  echo 
"В этой системе русская локаль имеет имя '".$loc_ru."'";  // Локаль отображает "ru_RU.utf8"

// form

if( isset( $_REQUEST['text'] ) ){
    
$text $_REQUEST['text'];   

    
$conn mysql_connect/* Данные для подключения */ );
    
mysql_select_db/* Данные для подключения */$conn );
    
    
mysql_query"set names utf8" );    
    
$result mysql_query"SELECT * FROM syns" );
    
    while( 
$row mysql_fetch_assoc$result ) ){
        
$syns trim$row['syns'] );
        
$word trim$row['word'] );

        
$text preg_replace"/\b(" $word ")\b/iu"$syns$text );
    }
    
    
mysql_close$conn );
    
    echo 
$text;  
}


Я не знаю начальных кодировок, по этому не знаю как их изменить, вроде нужно через функцию iconv.
Код пишу в нотепад, кодировка самого файла, UTF8

  Ответить  
 
 автор: Sfinks   (05.03.2012 в 21:58)   письмо автору
 
   для: rafonets   (05.03.2012 в 19:16)
 

Вроде все нормально. Попробуйте после подключения к БД вставить
if(!@mysql_set_charset("utf8")) exit(@mysql_error());


> Код пишу в нотепад, кодировка самого файла, UTF8
А в браузере какая кодировка выбрана, когда открываете форму для ввода заменяемой фразы?
В нотепад вы врядли пишите в юникоде.

> Я не знаю начальных кодировок, по этому не знаю как их изменить, вроде нужно через функцию iconv.
Лучше всего не менять ничего в процессе, а сразу делать все в utf-8. Намучаетесь с этим iconv. Поверьте, я спотыкался.

  Ответить  
 
 автор: rafonets   (06.03.2012 в 09:07)   письмо автору
 
   для: Sfinks   (05.03.2012 в 21:58)
 

Ошибки не выбило, но и preg_replace тоже не заработал
В браузере тоже UTF8

  Ответить  
 
 автор: rafonets   (06.03.2012 в 09:16)   письмо автору
 
   для: rafonets   (06.03.2012 в 09:07)
 

Может у меня компа тупит? вот ссылка http://inga-blogger.ru/synon/index.php вбейте любые слова например букву "а", и слово "адвокат", они должны синонимизироватся. Результат увидите в новом TEXTAREA снизу, последняя строка(и)

  Ответить  
 
 автор: Sfinks   (06.03.2012 в 14:55)   письмо автору
 
   для: rafonets   (06.03.2012 в 09:16)
 

У меня результат такой:
А может сосиски лучше прожарить?
--------------------------------------
--------------------------------------
Уважаемые пользователи дальше текст нечитабельный, мы просто привлекаем поисковые системы к нашему сайту :)
--------------------------------------
А moжeT cocиckи лy4шe прoжaриTь?
А может сосиски лучше прожарить?
не очень понятно что это

  Ответить  
 
 автор: rafonets   (06.03.2012 в 19:18)   письмо автору
 
   для: Sfinks   (06.03.2012 в 14:55)
 

Вот что и как:

А может сосиски лучше прожарить?   // Оригинал то что вы ввели
-------------------------------------- 
-------------------------------------- 
Уважаемые пользователи дальше текст нечитабельный, мы просто привлекаем поисковые системы к нашему сайту :)  // Это просто сообщение для пользователей сайта
-------------------------------------- 
А moжeT cocиckи лy4шe прoжaриTь? // Здесь русские буквы заменяем английскими 
А может сосиски лучше прожарить? // а тут результат работы рег. выражения

  Ответить  
Rambler's Top100
вверх

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