encoding в БД и запис

crystalline

Registered
здравйте,
след родилни мъки (благодаря на bafitu и jooroo) се справих и подкарах търсачката, която е дадена като урок от jooroo http://web-tourist.net/login/login/view.php?st=1106

и всичко си работи перфектно (на английске език), но когато записът ми е на български език ми изкарва резулата под формата на ??? а не текст на бг...някакви идеи защо може да се получава така

самата БД и таблица са ми със cp1251_bulgarian_ci encoding...
kolaciq.jpg


пхп файлa е с UTF-8 Unicode
ето го и кода:

Код:
<?php

$tarsene = $_GET[Search];

if($_GET['Search'])
{
//server connfigure////////////////////////////////////////////////
$server = "localhost";
$dbusername = "user";
$dbpassword = "pass";
$db_name = "db";
//server connfigure/////////////////////////////////////////////////

mysql_connect($server, $dbusername, $dbpassword)or die("Сайтът не може да се свърже към базата данни");
@mysql_select_db($db_name) or die("Грешна база данни");

//следните функции са за разделяне на стринга,
//за да не търси последователност
$trimmed = trim($tarsene); //премахваме ненужните полета
$var = explode(" ",$trimmed); //разделяме стринга думи
$count = count($var); //преброяваме думите в стринга

//следва един цикъл с които избягваме дублиращите се резултати
for($i = $count-1;$i < sizeof($var); $i++) {

$abc = $var[$i];

//правиме заявка към базата данни ползваме $abc което е всяка отделна дума от стринга,
//а '% %' го ползваме за да може примерно ако търсиме "кон" да покаже и резултати като "конски"
$chars="SET CHARACTER SET cp1251";mysql_query($chars);
$querys = " SELECT * FROM news WHERE `newstext` LIKE '%$abc%' ORDER BY id_news DESC";
$results = mysql_query($querys) or die('Error, query failed');
$count = mysql_num_rows($results);
//и ако са по малко от 1 ще покаже съобщение че няма намерени резултати.
if ($count<1)

{echo "<center><b>Няма намерени резултати за ".$tarsene."</b></center><br><br>";}


while($row = mysql_fetch_array($results))
{
$id_news=$row[id_news];
$newstext=$row[newstext];

//следващата функция е за заместването на търсените думи от стринга
//със същите думи, но с оцветяване. font style=color:#000000;background-color:#FFFF00; тук
//сме задали какъв да е цвета на шрифта и какъв на бекграунда на търсената дума.
$replece=array();

for($i = 0;$i < sizeof($var); $i++) {
$newvar[$i]="<font style=color:#000000;background-color:#FFFF00;><b>$var[$i]</b></font>";
array_push($replece,$newvar[$i]);
}

$newtext=str_replace($var,$replece,$newstext);

//и следва шизуализиране на заявката. забележете, че вмесо да изпишем $newstext ползваме вече
//текста с заменените думи с оцветяване $newtext.

echo "<table width=100% border=0 cellpadding=0 cellspacing=0>
<tr>

<td class=text height=19 background=img/h_gr2.gif>  <strong><a href=fullnews.php?id_news=".$id_news.">".$title."</a></strong></td>
</tr>

<tr>
<td>
<table id=lineLRBs class=nav border=0 cellpadding=0 cellspacing=0 width=100%>
<tr>
<td height=25px id=lineBottom width=33%>  Параграф: </td>
<td height=25px id=lineBottom width=33%> </td>
<td height=25px id=lineBottom width=34%>  </td>
</tr>
<tr>
<td id=lineBottom width=100% colspan=3><div><table cellpadding=5 width=100%>
<tr>
<td width=100%><p align=justify>$newtext</p></td>
</tr>
</table></div></td>
</tr>
<tr>
<td height=25px width=33%></td>
<td height=25px width=33%> </td>
<td height=25px width=34%> </td>
</tr>
</table>";
echo "<br>";
}}} //затваряме всички вече отворени големи скоби.
?>

</body>
</html>

благодаря ви предварително!
 
А имаш ли някъде <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
и къде отваряш </body>
</html>
 
vladislav, това ли имаш предвид ?

...
//правиме заявка към базата данни ползваме $abc което е всяка отделна дума от стринга,
//а '% %' го ползваме за да може примерно ако търсиме "кон" да покаже и резултати като "конски"
$chars="SET CHARACTER SET cp1251";mysql_query($chars);
$querys = " SELECT * FROM news WHERE `newstext` LIKE '%$abc%' ORDER BY id_news DESC";
$results = mysql_query($querys) or die('Error, query failed');
$count = mysql_num_rows($results);
//и ако са по малко от 1 ще покаже съобщение че няма намерени резултати.
if ($count<1)
...

защото кода си беше така и преди...

Galli, мерси. :) добавих мета тага в търсене.пхп и се получи...благодаря ти

хм...интересно ми е дали ще имам други подобни проблеми с езици като немски, руски и френски... :roll:
 
всъщност в търсене.пхп сега добавих мета тага за бг...иначе никъде няма тяло и хтмл...трябва ли ? :shock:
 
не е ли най-лесно да се настрои на utf8_unicode_ci и чарсета да е utf-8...така всичко си излиза както трябва независимо на кой език го пишем...успех
 
Malfurion каза:
не е ли най-лесно да се настрои на utf8_unicode_ci и чарсета да е utf-8...така всичко си излиза както трябва независимо на кой език го пишем...успех

имаш предвид колацията на БД/таблица да е utf8_unicode_ci така ли ?

на кое викаш чарсет ? *shy*
 
crystalline каза:
Malfurion каза:
не е ли най-лесно да се настрои на utf8_unicode_ci и чарсета да е utf-8...така всичко си излиза както трябва независимо на кой език го пишем...успех

имаш предвид колацията на БД/таблица да е utf8_unicode_ci така ли ?

на кое викаш чарсет ? *shy*
да...всичките ми бази данни са със колация utf8_unicode_ci. Ето ти пример

Код:
CREATE TABLE `fps` (
  `id` int(8) NOT NULL default '0',
  `fps` text collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM [color=red]DEFAULT CHARSET=utf8 [/color] [color=darkblue]COLLATE=utf8_unicode_ci;[/color]
Със червено е чарсета а с синьо е колацията
 

Back
Горе