Rss İşlevi

2 Cevap php

PHP ile bir rss feed oluşturmak için bir işlevi var:

    function createRSS() {
    $currentDate = time();
    $sql = "SELECT * FROM ". ADS_TABLE ." WHERE expires > $currentDate ORDER BY enterd DESC LIMIT 0,400";
    $results = myExec($sql);
    // open a file pointer to an RSS file
    $fp = fopen ("mexautosrss.xml", "w");
    if (!$fp) {
    // Can't write to a file
    return;
    }

    fwrite ($fp, "<?xml version='1.0' encoding='iso-8859-1' ?>\n");
    //ERROR:  fwrite ($fp, "<rss version='2.0' xmlns:atom="http://www.mexautos.com/mexautosrss.xml"><channel>\n");
    fwrite ($fp, "<title>MexAutos.com</title>\n");
    //ERROR:  fwrite ($fp, "<atom:link href="http://www.mexautos.com/mexautosrss.xml" rel="self" type="application/rss+xml" />\n");
    fwrite ($fp, "<link>http://www.mexautos.com/</link>\n");
    fwrite ($fp, "<description>Anuncios de Autos y Camionetas Usados en Mexico.</description>\n");
    fwrite ($fp, "<language>es-mx</language>\n");
    fwrite ($fp, "<docs>http://www.mexautos.com/mexautosrss.xml</docs>\n");
    fwrite ($fp, "<image>\n");
    fwrite ($fp, " <title>Mexautos.com</title>\n");
    fwrite ($fp, " <url>http://www.mexautos.com/images/logo_top_es.gif</url>\n");
    fwrite ($fp, " <link>http://www.mexautos.com</link>\n");
    fwrite ($fp, "</image>\n");

    while ($row = mysql_fetch_array($results)) {
    $makeId = $row['make'];
    $makeSQL = "SELECT name FROM ". CAR_MAKES_TABLE ." WHERE pkMakeID=$makeId";
    $makeResults = myExec($makeSQL);
    $make = mysql_fetch_row($makeResults);
    $modelId = $row['model'];
    $makeSQL = "SELECT name FROM ". CAR_MODELS_TABLE ." WHERE pkModelID=$modelId";
    $makeResults = myExec($makeSQL);
    $model = mysql_fetch_row($makeResults);
    $stateId = $row['state'];
    $makeSQL = "SELECT name FROM ". STATES_TABLE ." WHERE pkStateID=$stateId";
    $makeResults = myExec($makeSQL);
    $state = mysql_fetch_row($makeResults);
    $title = $make[0]." ".$row['make_other']." ".$model[0]." ".$row['model_other']." '".$row['model_year'];
    $content = "$".$row['price']." mil pesos ".$row['color']." Clima: ".$row['clima']." ".$row['milage']." mil kms Puertas: ".$row['doors']." ".$row['transmission']." ".$row['comment']." Tel: ".$row['tel_num']." (".$state[0].")";
    $search = array(
    '@<script[^>]*?>.*?</script>@si', // Strip out javascript
    '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
    '@([\r\n])[\s]+@', // Strip out white space
    '@&(quot|#34);@i', // Replace HTML entities
    '@&(amp|#38);@i',
    '@&(lt|#60);@i',
    '@&(gt|#62);@i',
    '@&(nbsp|#160);@i',
    '@&(iexcl|#161);@i',
    '@&(cent|#162);@i',
    '@&(pound|#163);@i',
    '@&(copy|#169);@i',
    '@&(acento|#0027);@i',
    '@&#(\d+);@e'); // evaluate as php
    $replace = array(
    '',
    '',
    '\1',
    '"',
    '&',
    '<',
    '>',
    ' ',
    'chr(161)',
    'chr(162)',
    'chr(163)',
    'chr(169)',
    'chr(\1)');
    $content = preg_replace($search, $replace, $content);
    $title = preg_replace("/&/", 'y', $title);
    $content = preg_replace("/&/", 'y', $content);
    fwrite ($fp, "<item>\n");
    fwrite ($fp, " <title>$title</title>\n");
    fwrite ($fp, " <description>$content</description>\n");
    fwrite ($fp, " <link>http://www.mexautos.com/</link>\n");
    fwrite ($fp, "<guid>http://www.mexautos.com</guid>\n");
    fwrite ($fp, "</item>\n");
    }
    fwrite ($fp, "</channel></rss>\n");
    fclose ($fp);
    }

Çizgiler, gösterir: sorun, ben "bağlantısını atom" açıklama yoksa bir hata almak olduğunu:

Ayrıştırma hatası: sözdizimi hatası, beklenmedik T_STRING

Birisi bana onun hata işaret olabilir?

Thx

2 Cevap

Eğer PHP (ya da hemen hemen başka bir dil) bir çift tırnaklar içinde çift tırnak karakterleri içeriyorsa, bu literal çift tırnak karakterleri kaçmak gerekir.

fwrite ($fp, "<rss version='2.0' xmlns:atom=\"http://www.mexautos.com/mexautosrss.xml\"><channel>\n");

: Yoksa HTML genellikle birbirinin yerine tek-tırnak kullanmak

fwrite ($fp, "<rss version='2.0' xmlns:atom='http://www.mexautos.com/mexautosrss.xml'><channel>\n");

See specification of quote types to delimit HTML/SGML attributes here: http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2

By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39). Single quote marks can be included within the attribute value when the value is delimited by double quote marks, and vice versa.

Son cümle senin senaryo değil tırnak içeren HTML nitelik dizeler için de geçerlidir. Ama tırnak içeren bir alıntı dize ile PHP kodu var, ve PHP tırnak hakkında aynı politikayı destekliyor.

Doğru dizeleri kaçmak gerekir:

fwrite ($fp, "<rss version='2.0' xmlns:atom=\"http://www.mexautos.com/mexautosrss.xml\"><channel>\n");