Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2013, 13:26   #1
SweetTequila
 
Регистрация: 10.01.2012
Сообщений: 5
Печаль Поиск в xml и вывод результата!

Люди добрые,можете помочь?!
Проблема заключается в следующем,есть БД Postgresql с кодировкой win-1251 (другая кодировка не выставляется) и есть написанный код который ищет по xml документу слово.xml документ хранится в бд,при нахождение искомого слова,код выводит его,так вот,если вводится английское слово,то английский текст выводится без проблем а русский одни каракули,если вводить в поиске русские буквы,то выдает ошибку
Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 1

Можете сказать,как,где и что надо написать,что бы этой ошибки не было и что бы выводилось все нормально,даже при вводе русских букв или слов

код программы:
Код:
<?php
header( 'Content-Type: text/html; charset=utf-8');
if (isset($_GET['search']) && ($_GET['search'] != ""))
{
// поисковой запрос
$str = $_GET['search'];

function prepString($str) {

// шаблоны для поиска
$pattern = array( 
1 => '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/',
2 => '/(с[яь])$/',
3 => '/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|еых|ую| юю|ая|яя|ою|ею)$/',
4 => '/((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))$/',
5 => '/((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ены|ит ь|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$/',
6 => '/(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|и|ы|ь|и ю|ью|ю|ия|ья|я)$/'
);

// подготовка строки для поиска
if ( preg_match($pattern[1], $str) ) {
$test = preg_replace($pattern[1], '.*', $str);
} else if( preg_match($pattern[2], $str) ) {
$test = preg_replace($pattern[2], '.*', $str);
} else if( preg_match($pattern[3], $str) ) {
$test = preg_replace($pattern[3], '.*', $str);
} else if( preg_match($pattern[4], $str) ) {
$test = preg_replace($pattern[4], '.*', $str);
} else if( preg_match($pattern[5], $str) ) {
$test = preg_replace($pattern[5], '.*', $str);
} else if( preg_match($pattern[6], $str) ) {
$test = preg_replace($pattern[6], '.*', $str);
} else {
$test = $str . '.*';


}
return $test;
}

// формируем строку для поиска
$str = explode(" ", trim($str));
$search = '/';
foreach ( $str as $val ) {
$search .= prepString($val);
}
$search .= '/usi';

// устанавливаем соединение с БД
$db = pg_connect("host=localhost dbname=labsxml user=postgres password= ") 
or die("Ошибка подключения к БД:" . pg_last_error());

$sql = 'SELECT name, opicanie FROM "gods"';
$query = pg_query($db, $sql) or die("Ошибка запроса:" . pg_last_error());

while ( $data = pg_fetch_array($query, NULL, PGSQL_ASSOC) ) {
$result[] = $data;
}

foreach ( $result as $val ) {
if ( preg_match($search, $val['name']) ) {
echo $val['opicanie']; 
echo '<br>';
}
}

pg_close($db);
}
?>


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 01.11.2013 в 13:50.
SweetTequila вне форума Ответить с цитированием
Старый 01.11.2013, 19:32   #2
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Проблема в регулярных выражениях, там должен быть ключ \x
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 02.11.2013, 13:13   #3
SweetTequila
 
Регистрация: 10.01.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от TranceSmile Посмотреть сообщение
Проблема в регулярных выражениях, там должен быть ключ \x
а для особо бестолковых,не подскажите в каком месте надо поставить этот ключ,что бы все заработало?)

Заранее благодарю
SweetTequila вне форума Ответить с цитированием
Старый 03.11.2013, 15:28   #4
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Код:
1 => '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/x',
// или
1 => '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/u',
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 03.11.2013, 21:08   #5
SweetTequila
 
Регистрация: 10.01.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от TranceSmile Посмотреть сообщение
Код:
1 => '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/x',
// или
1 => '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/u',
Сделала так как вы сказали,ошибка все равно так и осталась (((
SweetTequila вне форума Ответить с цитированием
Старый 04.11.2013, 10:55   #6
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Код:
$search .= '/xsi';
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 04.11.2013, 19:54   #7
SweetTequila
 
Регистрация: 10.01.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от TranceSmile Посмотреть сообщение
Код:
$search .= '/xsi';
ох...все не слава богу ) спасибо за совет,сделала как вы сказали
ошибка исчезла,но теперь просто белый экран и все )
ни чего не находит (
Слова которые ввожу в поиск в тексте присутствуют

Может ли быть такое из-за того,что у меня стоит Denwer?и в postgresql кодировка для бд ставиться только win-1251?

Последний раз редактировалось SweetTequila; 05.11.2013 в 08:47.
SweetTequila вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод результата на экран. Gtnz8 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 12.02.2013 10:29
Вывод результата! Аделинкка Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 29 09.05.2012 08:12
вывод результата Илья- Общие вопросы C/C++ 0 16.11.2011 17:29
поиск пустых ячеек и вывод результата alexander_l Microsoft Office Excel 7 17.06.2010 16:50
Поиск и вывод результата на другой лист!!! Ilnour1986 Microsoft Office Excel 12 23.10.2009 11:38