|
|
|
| Добрый день, нашел базу синонимов, скачал подготовил, написал скрипт на денвере все пашет! Перекинул на хостинг к 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:13)
| | Проверил с английскими символами тоже самое | |
|
|
|
|
|
|
|
для: rafonets
(05.03.2012 в 16:13)
| | Погодите, интерпретатор у вас ругается на preg_replace_callback(), а показываете вы совершенно другую функцию - preg_replace()... | |
|
|
|
|
|
|
|
для: 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 работает | |
|
|
|
|
|
|
|
для: rafonets
(05.03.2012 в 16:32)
| | >Но все-же почему preg_replace не работает? он на denwer работает
А в чем выражалась "не работа"?
PS Русская локаль настроена? | |
|
|
|
|
|
|
|
для: cheops
(05.03.2012 в 16:37)
| | Из примера текст:
А может сосиски лучше прожарить?
В денвер становиться:
однако может сосиски лучше прожарить?
а на хостинге не изменяется. А как можно просмотреть локаль? | |
|
|
|
|
|
|
|
для: 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'";
?>
| а в след за ним выполнить ваше регулярное выражение. | |
|
|
|
|
|
|
|
для: cheops
(05.03.2012 в 16:49)
| | В моей системе у русской локали нет имени =[
рег. выражение тоже не заработало | |
|
|
|
|
|
|
|
для: rafonets
(05.03.2012 в 16:55)
| | Попробуйте службу тех.поддержки потрясти этим вопросом, возможно, на сервере какие-то другие порядки работы с русским текстом или локаль как-то хитрее называется/выставляется? | |
|
|
|
|
|
|
|
для: cheops
(05.03.2012 в 17:10)
| | ок | |
|
|
|
|
|
|
|
для: rafonets
(05.03.2012 в 17:17)
| | Посоветовали использовать локаль ru_RU.utf8, но все равно, preg_replace не заработал | |
|
|
|
|
|
|
|
для: rafonets
(05.03.2012 в 18:14)
| | С utf8 нужно, чтобы весь ваш текст был в кодировке UTF-8 и скрипт тоже, а в регулярное выражение нужно добавить модификатор u, т.е. вместо писать так | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: rafonets
(05.03.2012 в 19:16)
| | Вроде все нормально. Попробуйте после подключения к БД вставить
if(!@mysql_set_charset("utf8")) exit(@mysql_error());
|
> Код пишу в нотепад, кодировка самого файла, UTF8
А в браузере какая кодировка выбрана, когда открываете форму для ввода заменяемой фразы?
В нотепад вы врядли пишите в юникоде.
> Я не знаю начальных кодировок, по этому не знаю как их изменить, вроде нужно через функцию iconv.
Лучше всего не менять ничего в процессе, а сразу делать все в utf-8. Намучаетесь с этим iconv. Поверьте, я спотыкался. | |
|
|
|
|
|
|
|
для: Sfinks
(05.03.2012 в 21:58)
| | Ошибки не выбило, но и preg_replace тоже не заработал
В браузере тоже UTF8 | |
|
|
|
|
|
|
|
для: rafonets
(06.03.2012 в 09:07)
| | Может у меня компа тупит? вот ссылка http://inga-blogger.ru/synon/index.php вбейте любые слова например букву "а", и слово "адвокат", они должны синонимизироватся. Результат увидите в новом TEXTAREA снизу, последняя строка(и) | |
|
|
|
|
|
|
|
для: rafonets
(06.03.2012 в 09:16)
| | У меня результат такой:
А может сосиски лучше прожарить?
--------------------------------------
--------------------------------------
Уважаемые пользователи дальше текст нечитабельный, мы просто привлекаем поисковые системы к нашему сайту :)
--------------------------------------
А moжeT cocиckи лy4шe прoжaриTь?
А может сосиски лучше прожарить?
| не очень понятно что это | |
|
|
|
|
|
|
|
для: Sfinks
(06.03.2012 в 14:55)
| | Вот что и как:
А может сосиски лучше прожарить? // Оригинал то что вы ввели
--------------------------------------
--------------------------------------
Уважаемые пользователи дальше текст нечитабельный, мы просто привлекаем поисковые системы к нашему сайту :) // Это просто сообщение для пользователей сайта
--------------------------------------
А moжeT cocиckи лy4шe прoжaриTь? // Здесь русские буквы заменяем английскими
А может сосиски лучше прожарить? // а тут результат работы рег. выражения
|
| |
|
|
|