Üyelik Tarihi: 02.11.2001
Yer: Viyana, İstanbul
Yaş: 31
Mesaj: 1,019
|
encodingleri farklı 2 rss ile ajax sorunu
Şöyle bir sayfam var, Hürriyet linkine tıklayınca; Haberler div i içine Hürriyetin RSS ini parse ediyor benzer şekilde Radikal e tıklayınca radikalin haber başlıkları geliyor
Herşey güzel ancak RSS lerdeki encoding farkı dolayısı ile utf-8 yapınca radikal, iso-8859-9 yapınca da hürriyet görüntülenmiyor.
Bazı yerlerde değişiklik yapıncada ikisi de görünüyor ancak ikisi de hatalı (şu andaki hali) da olsa ikisi de sonuç döndürmeye başladı.
Öyle çok fazla kodla aram olmadığı için str_replace ile hatalı türkçe karekterleri düzeltmeye çalıştım ancak sorunu aşamadım.
Anladığım kadarı ile henüz bu aşamaya gelmeden .js de düzenleme gerekli sanırım ama ne?
<a href="JavaScript:update('hur1','haberler');">Hürriyet</a>
<a href="JavaScript:update('rdk1','haberler');">Radikal</a>
<form name="hur1" id="hur1" method="post" action="">
<input name="url" type="hidden" id="url" value="http://RSS.hurriyet.com.tr/RSS.aspx?sectionId=2">
</form>
<form name="rdk1" id="rdk1" method="post" action="">
<input name="url" type="hidden" id="url" value="http://www.radikal.com.tr/radikal.XML">
</form>
<div id="haberler">bilgiler buraya gelecek</div>
update fonksiyonunun yer aldığı ajax.js
// ajax / XMLHTTPRequest uygulaması
// ceviz.net
var http_request = false;
function update(formid,divid){
// document.getElementById(divid).innerHTML="işleminiz yapılıyor,Lütfen bekleyin..";
var form = document.getElementById(formid);
var http_request = false;
http_request = false;
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/XML; charset=iso-8859-9');
}
} else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}
http_request.onreadystatechange = alertContents;
http_request.open('POST', "haberler.PHP", true);
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Connection", "close");
http_request.send(createQuery(form));
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
document.getElementById(divid).innerHTML=http_request.responseText;
}else { alert('Hata Oluştu, Tekrar Deneyin...');}
}
}
}
function createQuery(form)
{
var elements = form.elements;
var pairs = new Array();
for (var i = 0; i < elements.length; i++) {
if ((name = elements[i].name) && (value = elements[i].value))
pairs.push(name + "=" + encodeURIComponent(value));
}
//pairs.push("param1=1");
return pairs.join("&");
}
ajax.js de iletişime geçilen haberler. PHP
<?PHP
// RSSlib @ 2RSS.com :: RSS directory, RSS scripts, RSS articles, RSS software
// This scripts are distributed for free and are provided "AS IS". Read docs.htm
// Copyright: Ovi Crisan @ www.2RSS.com
// parameters used for caching
$use_cache=false;
$cache_folder="tmp";
$cache_valid=3600; // minutes
$display_channel_name=false; // set to false to hide channel name & link
$channel[]=array("","","","","","");
// ***********************************************************
/********** Türkçeleştirme *********/
function tr ($text) {
$tr_yanlis = array (
'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
'&Ccedil;','&ccedil','Ö','ö','Ü','ü',
'Ð','ð','Ý','ý','Þ','þ',
'Ð','ð','Ý','ý','Þ','þ');
//"'", '"'
$tr_dogru = array (
'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
'Ç','ç','Ğ','ğ','İ','ı','Ö','ö','Ş','ş','Ü','ü',
'Ç','ç','Ö','ö','Ü','ü',
'Ğ','ğ','İ','ı','Ş','ş',
'Ğ','ğ','İ','ı','Ş','ş');
//''','"'
$text = str_replace($tr_yanlis, $tr_dogru, $text);
return $text ; }
/********************/
function getrss($url) {
global $channel,$items,$src;
global $use_cache,$cache_folder,$cache_valid;
if($use_cache) {
$cache_filename=$cache_folder."/RSS-".$src."-".round (mktime()/43200).".HTML";
if(file_exists($cache_filename)) {
$t=filemtime($cache_filename);
$cache_create=((!$t)||($t < round (mktime()/43200)-60*$cache_valid)); }
else
$cache_create=true;
if($cache_create) {
//cache not valid - create it again
$simple = tr(file($url));
$f=fopen($cache_filename,"w");
for($i=0;$i<count($simple);$i++)
fwrite($f,$simple[$i]);
fclose($f);
$simple=implode('',$simple);
}
else
$simple = implode('',tr(file($cache_filename)));
}
else
$simple = implode('',tr(file($url)));
$p = xml_parser_create($encoding);
//türkçe encoding
xml_parser_set_option($p, XML_OPTION_TARGET_ENCODING, "utf-8");
xml_parse_into_struct($p,$simple,$vals,$index);
xml_parser_free($p);
$type=0;
$tmp[]=array("","","");
$id=0;
for($i=0;$i<count($vals);$i++) {
if(($vals[$i]['tag']=="CHANNEL")&&($vals[$i]['type']=="open")) $id=$vals[$i]['level']+1;
if(($type==0)&&($id==$vals[$i]['level']))
switch($vals[$i]['tag']) {
case "TITLE": $channel[0]=$vals[$i]['value']; break;
case "LINK": $channel[1]=$vals[$i]['value']; break;
case "DESCRIPTION":
case "CONTENT:ENCODED": $channel[2]=$vals[$i]['value']; break;
case "COPYRIGHT":
case "DC:RIGHTS": $channel[3]=$vals[$i]['value']; break;
case "MANAGINGEDITOR":
case "DC:PUBLISHER": $channel[4]=$vals[$i]['value']; break;
case "PUBDATE":
case "DC:DATE": $channel[5]=$vals[$i]['value']; break;
}
else switch($vals[$i]['tag']) {
case "TITLE": $tmp[0]=$vals[$i]['value']; break;
case "LINK": $tmp[1]=$vals[$i]['value']; break;
case "DESCRIPTION":
case "CONTENT:ENCODED": $tmp[2]=$vals[$i]['value']; break;
}
if($vals[$i]['tag']=="ITEM") {
if(($vals[$i]['type']=="open")&&($type==0)) $type=1;
if($vals[$i]['type']=="close") {
$items[]=$tmp;
$tmp[0]="";
$tmp[1]="";
$tmp[2]="";
}
}
}
echo '<span class="baslik">'.($channel[0]).'</span><br>';
} // end function getrss ***********************
// ********************************************
function rss2html($url,$m=0) {
global $channel,$items,$display_channel_name,$title;
getrss($url);
if($m==0) $m=count($items);
for($i=0;$i<$m;$i++) {
///sayfaya da göster
print '<h2><a href="' .$items[$i][0]. '" class="item">';
print $items[$i][0];
print '</a></h2>';
if($items[$i][2]) {
print '<p>';
print $items[$i][2]; $title=$items[$i][2];
print '</p>';
}
} //itemler sonu
if($channel[5]) print "<div class='copyright'>{$channel[5]}</div>\n";
if($channel[3]) print "<div class='copyright'>{$channel[3]}</div>\n";
print "<div class='copyright'>Powered by <a href='http://www.2RSS.com' target='_blank' class='copyright'>RSSlib</a></div><br>\n";
} //end function rss2html *************************************
// RSSlib @ 2RSS.com :: RSS directory, RSS scripts, RSS articles, RSS software
// This scripts are distributed for free and are provided "AS IS". Read docs.htm
// Copyright: Ovi Crisan @ www.2RSS.com
error_reporting(0);
$url=$_POST['url'];
if(!$url)
print "Error: URL missing!";
else {
$m=$_GET['rss_items'];
if(!$m) $m=0;
$ch=$_GET['rss_chars'];
if(!$ch) $ch=0;
rss2html($url,$m,$ch,$t);
}
?>
|