Hi there guys,

I am trying to create an RSS feed and for the life of me I can't get it to create working hyperlinks. Any help would be so massively appreciated.

<?php

session_start();	

$connection = mysql_connect("******", "******", "*****") or die (mysql_error());

$db = mysql_select_db("****", $connection) or die (mysql_error());

$q18 = "select * from settings where settingid = '1'";
$r18 = mysql_query($q18) or die(mysql_error(Error5));
$a18 = mysql_fetch_array($r18);

require_once 'rss_class.inc.php';

function stripchars($str)
{
	$body = htmlentities("$str");
    $body = ereg_replace(128, "&euro;", $body); // Euro symbol
    $body = ereg_replace(133, "&#133;", $body); // ellipses
    $body = ereg_replace(8226, "&#8243;", $body); // double prime
    $body = ereg_replace(8216, "&#039;", $body); // left single quote
    $body = ereg_replace(145, "&#039;", $body); // left single quote
    $body = ereg_replace(8217, "&#039;", $body); // right single quote
    $body = ereg_replace(146, "&#039;", $body); // right single quote
    $body = ereg_replace(8220, "&#034;", $body); // left double quote
    $body = ereg_replace(147, "&#034;", $body); // left double quote
    $body = ereg_replace(8221, "&#034;", $body); // right double quote
    $body = ereg_replace(148, "&#034;", $body); // right double quote
    $body = ereg_replace(8226, "&#149;", $body); // bullet
    $body = ereg_replace(149, "&#149;", $body); // bullet
    $body = ereg_replace(8211, "&#150;", $body); // en dash
    $body = ereg_replace(150, "&#150;", $body); // en dash
    $body = ereg_replace(8212, "&#151;", $body); // em dash
    $body = ereg_replace(151, "&#151;", $body); // em dash
    $body = ereg_replace(8482, "&#153;", $body); // trademark
    $body = ereg_replace(153, "&#153;", $body); // trademark
    $body = ereg_replace(169, "&copy;", $body); // copyright mark
    $body = ereg_replace(174, "&reg;", $body); // registration mark
    $final = htmlentities("$body");
	
	return $final;
	
}

  $rss_channel = new rssGenerator_channel();

  $rss_channel->title = 'Latest Jobs from *******';

  $rss_channel->link = '';

  $rss_channel->description = 'The latest jobs from ********.co.uk';

  $rss_channel->language = 'en-uk';

 

    $selQry  = "SELECT * FROM jobs where status = '0' order by jobid desc limit 15";
  $a = mysql_query($selQry);
  while($b = mysql_fetch_array($a))
  {
  	$itemTitle =  strip_tags($b[position]);
	$itemTitle =  str_replace('"','',$itemTitle);
	$itemTitle =  str_replace("'",'',$itemTitle);
	$itemTitle =  str_replace("&",' and ',$itemTitle);
	$itemTitle =  str_replace('/&nbsp;/', ' ',$itemTitle);
	$itemTitle =  str_replace("/&apos;/", "'",$itemTitle);
	$itemTitle =  str_replace('151', "&#151;",$itemTitle);

	
	
	$itemDesc =  strip_tags($b[description]);
	$itemDesc =  substr($itemDesc,0,150);
	$itemDesc = stripchars($itemDesc) ;
	$itemDesc =  str_replace("&",' and ',$itemDesc);
	$itemDesc =  str_replace('/&nbsp;/', ' ',$itemDesc);
	$itemDesc =  str_replace("/&apos;/", "'",$itemDesc);
	$itemDesc =  str_replace('151', "&#151;",$itemDesc);
	
	
	if(strlen($itemDesc)>150){$dots='...';}
	$descTemp = $itemDesc . $dots;
	$itemDesc = $descTemp ;
	$itemLink  = $fullurl.'/info.php?jobid='.$b[jobid].'';
	
	$EXmonth3 = substr("$b[postdate]",0,2);
	$EXday3 = substr("$b[postdate]",3,2);
	$EXyear3 = substr("$b[postdate]",6,4);
	$itemDate =  "$EXday3/$EXmonth3/$EXyear3";
  
	  $item = new rssGenerator_item();
	  $item->title = $itemTitle;
	  $item->description = $itemDesc;
	  $item->link = $itemLink;
	  $item->pubDate = $itemDate;
	  $rss_channel->items[] = $item;
   }	 
  $rss_feed = new rssGenerator_rss();
  $rss_feed->encoding = 'UTF-8';
  $rss_feed->version = '2.0';
  header('Content-Type: text/xml');
  echo $rss_feed->createFeed($rss_channel);
?>

Dani AI

Generated

A few concise, practical takeaways that build on what and found and that will still be useful years later.

The root cause in this thread was an incorrect/undefined base URL and a malformed feed link value. RSS clients expect the <channel><link> and each <item><link> to be plain absolute URLs (no HTML anchors, no relative paths). Safari’s reader is forgiving and may auto-link text, while other readers require a proper absolute URL for the item link. Also make sure PHP array keys use quoted string indexes to avoid undefined-index behavior.

Common improvements and quick fixes to apply:

  • Ensure the channel <link> and every item <link> are absolute URLs (scheme + host).
  • Format item pubDate in RFC-2822 so readers parse it reliably.
  • If descriptions include HTML, put them inside CDATA rather than double-encoding entities.
  • Avoid double-encoding text (run htmlentities/htmlspecialchars once, not repeatedly).
  • Use url-encoding for query values (jobid) so the generated URL is valid.

Example patterns (adapt to your code base):

$base = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
$itemLink = $base . '/info.php?jobid=' . urlencode($b['jobid']);
$item->link = $itemLink;
$item->pubDate = date(DATE_RFC2822, strtotime($b['postdate']));
$item->description = '<![CDATA[' . $itemHtml . ']]>';

Extra notes: replace deprecated string-regex functions with modern equivalents, and consider moving off the old mysql_* API to mysqli or PDO for security and future compatibility. After changes, validate the feed with an RSS/Atom validator — a validator will quickly show missing/invalid elements that break client behavior.

Recommended Answers

All 5 Replies

Where is $fullurl set? Also, $b[jobid] should be $b["jobid"] or $b[$jobid] depending on what you meant.

$fullurl is referenced in the database. $b[jobid] was in the original working feed. Any other suggestions??? It works properly in Safari, not in IE, Firefox or Chrome. Does this make a difference??

alright i do not see $fullurl defined in your script and for a hyperlink to be active for a web link you'll need a http:// at the start of the link so i figure the problem is with the non defined $fullurl variable with in the script so your going to need to define it as so

// Dynamic Chosen url as so
$fullurl = $b['fullurl']; // $b['fullurl'] or $b['CHOOSE THE COLUMN OF THE URL']

// OR

// your site url as so
$fullurl = 'http://'.$_SERVER['HTTP_HOST'].'/';

this should fix you problem you having here
do you have any questions if so message me and ill try to help

ps: $b[jobid] should be $b

so there you go

also on the questions on the type of browser no it should not make no difference alright the changes in the browser you asked about only have changes in the CSS part not the php that is all compiled on your server when the users points to the page then is printed out on the screen after being compiled the browser dose not compile the script that is the point of the server so no there is no difference alrighty

Thank you very much.

That worked and now it works fine.

your welcome

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.