[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск в xml
SweetTequila
Люди добрые,можете помочь?! :blink:
Проблема заключается в следующем,есть БД 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);
}
?>


Меняла кодировку в самом файле php на windows-1251,но все равно выдает эту ошибку (
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.