проблем със utf-8 и записване на информация в ДБ

lekov90

Registered
проблема е следния имам скрипт за добавяне на клипчета от вбокс и когато заглавието на клива във вбокс е написано на кирилица информацията в датабазата е запосва под форамта на ???? ако можете ударете едно рамо

ето го скрипта:
Код:
<?PHP
include('settings.php'); ?>
<div class="black_bar">Добавяне на видео</div>
<div class="song"><center>
<table width="480" align="center"><tr><td>
<form method="POST" action="">
URL от vbox7.com</td><td><input type="text" name="url"></td></tr>
<tr><td>Жанр:</td><td>
<select name="kategoria">
<option value=popfolk>Поп Фолк</option>
<option value=rap>Рап</option>
<option value=rnb>R & B</option>
<option value=rok>Рок</option>
<option value=metyl>Метъл</option>
<option value=hiphop>Хип Хоп</option>
<option value=house>Хаус</option>
<option value=elektro>Електро</option>
<option value=balada>Балада</option>
<option value=klasika>Класика</option>
<option value=folklor>Фолклор</option>
<option value=pop>Поп</option>
<option value=srybsko>Сръбско</option>
<option value=grycko>Гръцко</option>
<option value=other>Друг</option>
</select></td></tr>
<tr>
<td colspan="2">
<center><input type="submit" class="but" name="clips" value="Добави"></center>
</form> </td></tr></table>
<?php
if($_POST['clips']) {
$link=htmlspecialchars(addslashes($_POST[url]));
$author = $_SESSION['username'];
$fail = explode(':',$link);
$dir = substr($fail[2],0,2);
$source = file_get_contents($link);
$title = explode("<title>", $source);
$title = explode("</title>", $title[1]);
$title=str_replace(" / Vbox7","",$title[0]);
$title=iconv('utf-8','windows-1251',urldecode($title));
$ime = "$title";
$clip="http://media.vbox7.com/s/$dir/$fail[2].flv";
$pic="http://i47.vbox7.com/p/$fail[2]3.jpg";
$cat = $_POST['kategoria'];

$number = explode(":", $link);
$i = substr($number[2],0 ,2);
$link1 = "http://media.vbox7.com/s/$i/$number[2].flv";

if(@fopen("http://media.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media02.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media02.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media03.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media03.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media04.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media04.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media05.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media05.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media06.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media06.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media07.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media07.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media08.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media08.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media09.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media09.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media10.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media10.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media11.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media11.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media12.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media12.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media13.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media13.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media14.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media14.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media15.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media15.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media16.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media16.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media17.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media17.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media18.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media18.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media19.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media19.vbox7.com/s/$i/$number[2].flv";
}
elseif(@fopen("http://media20.vbox7.com/s/$i/$number[2].flv","r"))
{
$adres = "http://media20.vbox7.com/s/$i/$number[2].flv";
}
$checkurl = mysql_query("SELECT url FROM clips WHERE url='$link'");
$checkurl= mysql_num_rows($checkurl);
if ($ime>0) {
echo "Този клип вече е бил добавян";
}
if(eregi('vbox7.com',$link) && isset($_POST['clips'])){
$query = mysql_query("INSERT INTO `clips` (ime, url, pic, author, id, kategoria) VALUES('$title','$adres','$pic','$author','NULL','$cat')");
echo "Успешно добави клип ot vbox!<br><a href=\"news.php?m=clips\">Върни се в началната страница</a>";
}
else {
echo "Могат да се добавят само клипове от <a href='http://vbox7.com'>VBox7.com</a>";
}
}
?></center></div>
 
Преди
mysql_query("INSERT ....
добавяш
mysql_query("SET NAMES cp1251")or die(mysql_error());
или
mysql_query("SET NAMES utf8")or die(mysql_error());
в зависимост от това, какъв енкодинг използваш в сайта.

Естествено правиш това, ако липсва във файла settings.php (или както ти се казва конфигурационния файл).
 
значи във settings.php имам :
Код:
mysql_query("SET CHARACTER SET utf8");
.

Добавих
Код:
mysql_query("SET NAMES utf8");
преди INSERT заявката и пак си остана същата работа...
 
Пробвай с едно echo $title; там след експлоуда за да видиш дали още от там е проблема. В базата данни виж как ти ги записва - дали както трябва или пак с въпросителни. Също провери си колациите на таблицата в базата данни (най-добре на всичките да провериш). Успех!
 
колацията на таблицата е utf8_unicode_ci и в самата таблица записва информацията като ???????
 
Пример на видео таблица utf8:
Код:
CREATE TABLE IF NOT EXISTS `video` (
  `VID` bigint(20) NOT NULL AUTO_INCREMENT,
  `UID` bigint(20) NOT NULL DEFAULT '0',
  `title` varchar(120) NOT NULL DEFAULT '',
  `description` text NOT NULL,
  `featuredesc` text NOT NULL,
  `keyword` text NOT NULL,
  `channel` varchar(255) NOT NULL DEFAULT '0|',
  `vdoname` varchar(40) NOT NULL DEFAULT '',
  `flvdoname` varchar(40) DEFAULT NULL,
///  
//  още бози от таблица 
//
  `com_num` int(8) NOT NULL DEFAULT '0',
  `fav_num` int(8) NOT NULL DEFAULT '0',
  `download_num` bigint(20) NOT NULL DEFAULT '0',
  `featured` varchar(3) NOT NULL DEFAULT 'no',
//
//  още бози от таблица 
//
  `be_rated` varchar(3) NOT NULL DEFAULT 'yes',
  `embed` varchar(8) NOT NULL DEFAULT 'enabled',
  `embed_code` text NOT NULL,
  `thumb` tinyint(2) NOT NULL DEFAULT '1',
//
//  още бози от таблица 
//

  `active` char(1) NOT NULL DEFAULT '',
  PRIMARY KEY (`VID`),
  UNIQUE KEY `vkey` (`vkey`),
  KEY `viewnumber` (`viewnumber`),
  KEY `rate` (`rate`),
  KEY `fav_num` (`fav_num`),
  KEY `active` (`active`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Примерен код file.php utf-8

Код:
<?php

$user = "user";
$pwd = "pass";
$host = "localhost";
$dbname = "vboxvideo";
@mysql_query('SET NAMES utf8');
@mysql_query('SET CHARACTER SET utf8');
@mysql_query('SET COLLATION_CONNECTION="utf8_general_ci"');

mb_internal_encoding("UTF-8"); // tova ti trqbva !!!

/// tvoqt cod .... ... ... 
//  oshte ot tvoq kod...
// ........ 

$title = explode("<title>", $vname);
$title = explode(" / VBOX7</title>", $title[1]);
$title = str_replace(" / VBOX7","",$title[0]);

/// tvoqt cod .... ... ... 
//  oshte ot tvoq kod...
// ........ 


// sql 

$conn = mysql_connect($host,$user,$pwd) or ("<br>[en] ERROR on MySQL server connection");
(is_resource($conn));
(mysql_select_db($dbname,$conn));
@mysql_query('SET NAMES utf8');
@mysql_query('SET CHARACTER SET utf8');
@mysql_query('SET COLLATION_CONNECTION="utf8_general_ci"');


$sql2 = ("INSERT INTO video
(UID, title,  keyword, channel, flvdoname,  type, addtime, adddate, vkey) VALUES
('1', '" .mysql_real_escape_string($title)."', '" .mysql_real_escape_string($title)."', '$cat', '$vflv', 'public', '".time()."', '$today', '$vurl')");
$rez2 = mysql_query($sql2,$conn)or die(mysql_error());


/// tvoqt cod .... ... ... 
//  oshte ot tvoq kod...
// ........


Това е част от кода на www.mb7.org - Който също взима клипчетата от vbox7.com И работи изцяло на utf-8
 
ddevil благодарско за посещането не си бях оправил самите полета да са с utf8 и затова неставаше моля темата да бъде изтрита или заключена.
Няма да давам точка на никой защото трябва да дам на всички включили се в темата а това е невъзможно.

С Уважение: Николай Леков
 

Back
Горе