MainRadiotalkCustom
Общие вопросы по интернет радио вещанию
4   •   Посмотреть все темы

samPHPweb поиск. помогите с кириллицей

 

10
spryart @spryart
Привет, форумчане!
Сам не смог разобраться, поэтому решил написать сюда. В общем проблема такая:
На странице поиска из базы песен. Есть поиск по артисту и перечислен ряд английских букв. К сожалению когда кликаешь на одной из букв, то в результатах поиска выскакивают песни и на латинице и на кириллице вместе.

Как сделать отдельный ряд русских букв, чтобы искал только на кириллице. Либо подскажите как отбросить в результатах кириллицу при поиске английских артистов.

И если это для вас покажется легким, то вот еще пища для ума. Опять же проблема с кириллицей, когда вводишь слово на русском языке, то после нажатия кнопки поиска, русские буквы превращаются в непонятные иероглифы, но при это если слово встретилось в названии русских песен, то он их все выводит. Как избежать такое превращение буковок при нажатии на кнопку?

Желательно, привести готовые примеры на php. Или на чем там поиск осуществляется, либо подсказать странички где эта проблема обсуждалась и дано решение.

Извините за многословие (пытаюсь подробно описать проблему) и заранее спасибо, тем кто откликнутся.

410
Евгений @Drakkar
я бы тоже с удовольствием прочитал, как люди избавились от заразы под названием "когда вводишь слово на русском языке, то после нажатия кнопки поиска, русские буквы превращаются в непонятные иероглифы, но при это если слово встретилось в названии русских песен, то он их все выводит. Как избежать такое превращение буковок при нажатии на кнопку?"

6245
Тарас @tarasian666
наверно надо найти где идет запрос к базе в скритпе и задать mysql_query("SET NAMES latin1");

410
Евгений @Drakkar
<?php

// The class handling song info
include_once('classes/class.song.php');

if (ALLOW_REQUESTS) {
// An array of song objects with the top requested songs
$topRequestedSongs = Song::getTopRequestedSongs();
}

$start = Def('start', 0); // Where the playlist must start
$limit = Def('limit', 16); // How many items will be displayed
$search = Def('search'); // The search string
$character = Def('character'); // The letter to sort the playlist by
if ("All" == $character) {
unset($character);
}


//########## BUILD SEARCH STRING ################
$search_words = '';
if ($search <> '') {
$search_words = array();
$temp = explode(' ', $search);
reset($temp);
while (list($key, $val) = each($temp)) {
$val = trim($val);
if (!empty($val)) {
$search_words[] = $val;
}
}
}

// An array of song objects matching the search criteria
$playlistSongs = Song::getPlaylistSongs($search_words, $character, $start, $limit);
$cnt = Song::getPlaylistSongCount();

//########## =================== ################
$first = $start + 1;
$last = min($cnt, $start + $limit);

// Create the previous and next links based on the result
if ($cnt > 0) {
$searchstr = urlencode($search);
$prev = max(0, $start - $limit);
if ($start > 0) {
$prevlnk = "<a href='?start=$prev&limit={$limit}&character=$character&search=$searchstr'>&lt;&lt; Предыдущая</a>";
}

$tmp = ($start + $limit);
if ($tmp < $cnt) {
$nextlnk = "<a href='?start=$tmp&limit={$limit}&character=$character&search=$searchstr'>Следующая &gt;&gt;</a>";
}
}


Извините, я правильно копаю... это где то тут надо добавить? Если да, то укажите кусочег, где :(

6245
Тарас @tarasian666
похоже что не тут, это надо сделать перед запросом в базу SELECT

10
spryart @spryart
Drakkar пишет:



Извините, я правильно копаю... это где то тут надо добавить? Если да, то укажите кусочег, где :(


Не знаю нужно еще или нет, но я докопался где кроется решение для этой части моего вопроса..

в директории samPHP лежит файлик \library\Common\form.php

В нём есть метод(функция)

function InputText($name, $data, $def = "", $size = 20) {
FormatDefData($name, $data, $def);
echo '<input type="text" name="' . $name . '" size="' . $size . '" value="' . htmlentities($data) . '">';
}


дак вот последнюю строчку изменяем убрав в конце функцию htmlentities()
echo '<input type="text" name="' . $name . '" size="' . $size . '" value="' . $data . '">';

тогда если ввести поиск на русском, то те же слова и остаются.
Мне это помогло.

201
burn @burn
Спасибо что решили поделиться с нами своим решением!

Успехов