1. Halo Guest, pastikan Anda selalu menaati peraturan forum sebelum mengirimkan post atau thread baru.

[ask] Error saat convert ribuan data mysql ke XML menggunakan PHP

Discussion in 'Pemrograman Web' started by nicefirework, Dec 25, 2012.

  1. nicefirework

    nicefirework Super Hero

    Joined:
    Aug 21, 2010
    Messages:
    1,304
    Likes Received:
    251
    PHP:
    $xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
    <data>
    ";
    $hasil=mysql_query($query);
    while ($data=mysql_fetch_array($hasil))
    {
         $xml .="<description><![CDATA[".$data['description']."]]></description>";
    }
    $xml .="</data>";
    header("Content-type: text/xml");
    echo $xml;
    Pada mysql kolom description, saya lihat datanya banyak mengandung code html dan hasil paste dari word yang tidak terfilter. Saat saya coba di browser muncul error:
    Code:
    XML Parsing Error: not well-formed
    Location: http://localhost/coba.com/test.php
    Line Number 134129, Column 21:
    
    Sepertinya banyak character illegal yang merusak output data xml yang dihasilkan. Saya browsing2 dan coba menggunakan fungsi htmlspecialchars tidak berhasil untuk memfilter illegal character tersebut. Mohon solusinya para suhu disini thanks.
     
  2. masadi

    masadi Super Hero

    Joined:
    Dec 12, 2010
    Messages:
    2,334
    Likes Received:
    144
    Location:
    mas-adi.com
    gak di coba di RUN di hosting mas bro?
    mungkin karena kebanyakan yang di panggil jadi gak kelar loadingnya alias timed out ...
    Mungkin lho ya... :D
     
  3. nababan

    nababan Ads.id Fan

    Joined:
    Mar 8, 2011
    Messages:
    136
    Likes Received:
    57
    Location:
    Flashdisk

    coba seperti ini mas bro, bisa ga kira-kira...? hanya menambahkan fungsi untuk menconvert aja

    PHP:
    $xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
    <data>
    ";
    $hasil=mysql_query($query);
    while ($data=mysql_fetch_array($hasil))
    {
         $xml .="<description><![CDATA[".$data['description']."]]></description>";
    }
    $xml .="</data>";
    header("Content-type: text/xml");

    echo bersihintext($xml);

    function bersihintext($text) {
        $text = htmlspecialchars($text, ENT_QUOTES);
        $text = trim(chop($text));
        $text = preg_replace("/[\r|\n]/", "", $text);
        return $text;
        }
     
  4. nicefirework

    nicefirework Super Hero

    Joined:
    Aug 21, 2010
    Messages:
    1,304
    Likes Received:
    251
    Malah error sejak baris pertama bro..
    PHP:
    &lt;?xml version=&quot;1.0&quotencoding=&quot;utf-8&quot;?&gt;&lt;trovit&gt;&lt;ad&gt;        &lt;id&gt;&lt;![CDATA[7668]]&gt;&lt;/id&gt;        &lt;url&gt;&lt;![CDATA[http://localhost/
    memory localhost sudah tak besarin bro.. jadi ga mungkin time out.:)
    PHP:
    ini_set('memory_limit''128M');
    set_time_limit(0);
     
  5. gembel-intelek

    gembel-intelek Lurker

    Joined:
    Mar 29, 2009
    Messages:
    4,341
    Likes Received:
    907
    Location:
    New Coral
    coba gini kali aja bisa

    PHP:
    <?php    
    $dom 
    = new DOMDocument('1.0','utf-8');
    $root $dom->createElement('data');
    $dom->appendChild($root);
    $hasil=mysql_query($query);
    while (
    $data=mysql_fetch_array($hasil)){
        
    $element=$dom->createElement('description');
        
    $cdata=$dom->createCDATASection($data['description']);
        
    $element->appendChild($cdata);
        
    $root->appendChild($element);

    }
    header('Content-Type: text/xml');
    echo 
    $dom->saveXML();
    ?>
     
  6. mangacan

    mangacan Ads.id Starter

    Joined:
    Jun 10, 2010
    Messages:
    64
    Likes Received:
    1
    kemana aja nih TS, dah dibantuin...ga nongol2./..
     
  7. nekaters

    nekaters Hero

    Joined:
    Aug 12, 2012
    Messages:
    673
    Likes Received:
    31
    Location:
    Yogyakarta
    lagi sibuk banyak kerjaan kali gan, masak suruh nungguin thread terus.
    toh kita yg lain jg bs ikut belajar coding dari jawaban mastah2 diatas
     
  8. nicefirework

    nicefirework Super Hero

    Joined:
    Aug 21, 2010
    Messages:
    1,304
    Likes Received:
    251
    masih error bro..
    PHP:
    XML Parsing Errornot well-formed
    Location
    http://localhost/coba.com/coba.php
    Line Number 107Column 5:LB￿ 500
    ----^
    errornya pas ada tanda kotak sebelum angka 500. Seperti yang sudah saya bilang sebelumnya $data['description'] banyak mengandung code HTML, hasil copy paste dari MS words dan karakter-karakter UNICODE illegal. Pas mau echo struktur xmlnya langsung rusak karena $data['description'] belum di filter.

    saya coba pakai:
    PHP:
    htmlspecialchars($data['description'],ENT_COMPAT,"UTF-8");
    berhasil memfilter code html menjadi entity. seperti &ngt; &nquote; dll.

    kemudian saya remove html entity menggunakan preg_replace:
    PHP:
    preg_replace('/&.*?;/'''$data['description']);
    sempat berhasil untuk beberapa baris data saja:). Tapi mentok pada character unicode yang tidak bisa di kenali, saya lihat pada tabel terbaca kotak-kotak. atau tabel encoding yang kurang tepat ya?? padahal data sudah terlanjur banyak.:(

    Bagaimana cara meremove character unicode (kotak-kotak) tsb?

    contoh character unicode pada tabel database:
    PHP:
    � �
     
    Last edited: Dec 26, 2012
  9. nekaters

    nekaters Hero

    Joined:
    Aug 12, 2012
    Messages:
    673
    Likes Received:
    31
    Location:
    Yogyakarta
    kalo outputnya tanpa tag html di strip_tags aja gan. tp kalo tag html mau di output coba maen encode dan decode, spt json, serialize, atau replace karakter tsb.
     
  10. nicefirework

    nicefirework Super Hero

    Joined:
    Aug 21, 2010
    Messages:
    1,304
    Likes Received:
    251
    pakai strip_tags memang bisa memfilter html character bro.. tapi masih ada Unicode character yang format xml tdk terima.
     
  11. Dirry Q

    Dirry Q Ads.id Starter

    Joined:
    Oct 26, 2012
    Messages:
    91
    Likes Received:
    22
    Code:
    preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($data, ENT_QUOTES, 'UTF-8'));
    mungkin bisa Mastah, untuk filternya.
     
  12. dummydecoy

    dummydecoy Super Hero

    Joined:
    Jul 18, 2010
    Messages:
    970
    Likes Received:
    297
    coba cara ini

    PHP:
    $content htmlentities($content,ENT_QUOTES'UTF-8');
    $content xmlEntities($content);
    fungsina

    PHP:
    function xmlEntities($string) {    
    $translationTable get_html_translation_table(HTML_ENTITIESENT_QUOTES);
    foreach (
    $translationTable as $char => $entity) {        
    $from[] = $entity;        
    $to[] = '&#'.ord($char).';';    
    }    
    return 
    str_replace($from$to$string);
    }
     
  13. nicefirework

    nicefirework Super Hero

    Joined:
    Aug 21, 2010
    Messages:
    1,304
    Likes Received:
    251
    Masih error bro.
    PHP:
    XML Parsing Errornot well-formed
    fungsi htmlentities tetap tidak mengenali character kotak-kotak dalam kolom database. File xml yang dihasilkan break pada baris tersebut. Database collation saya pakai latin1_general_ci sedangkan format xml yang mau di generate UTF-8.

    Berikut Ini screenshot characternya:
    View attachment 25734
     
    Last edited: Dec 29, 2012
  14. gembel-intelek

    gembel-intelek Lurker

    Joined:
    Mar 29, 2009
    Messages:
    4,341
    Likes Received:
    907
    Location:
    New Coral
    di replace mau ga?

    PHP:
    preg_replace('/[^(\x20-\x7F)]*/',''$data['description']);
     
    nicefirework likes this.
  15. nicefirework

    nicefirework Super Hero

    Joined:
    Aug 21, 2010
    Messages:
    1,304
    Likes Received:
    251
    Cakep mastah, akhirnya 12 ribu baris berhasil di convert ke format xml. :) thanks
    PHP:
    $description     htmlspecialchars($data['description'],ENT_COMPAT,"UTF-8");
    $description    preg_replace('/[^(\x20-\x7F)]*/',''$description);
     
  16. mp3online

    mp3online Super Hero

    Joined:
    Jul 19, 2011
    Messages:
    2,228
    Likes Received:
    294
    Location:
    jakarta
    coba htmlspecialchars nya charset atau encodingnya jg didefinisikan mizal pake encode utf-8 atau iso-
    atau coba konversinya pake fungsi htmlentities
    atau pake fungsi mb_
     
  17. nicefirework

    nicefirework Super Hero

    Joined:
    Aug 21, 2010
    Messages:
    1,304
    Likes Received:
    251

Share This Page