1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Os links aparecem mal no meu blog

Discussão em 'Web Development' iniciada por joaopj, 2 de Setembro de 2007. (Respostas: 7; Visualizações: 640)

  1. joaopj

    joaopj Power Member

    Olá a todos, eu estou com um problema...

    Os links que eu posto no meu blog, aparecem mal lá dentro...
    Por exemplo, spread no meu blog aparece spread e para quem não notou a diferença nos dois, o primeiro, correcto, é
    Código:
    http://joaojeronimo.freehostia.com/?p=spread
    e o segundo dá em
    Código:
    http://joaojeronimo.freehostia.com/\"http://joaojeronimo.freehostia.com/?p=spread\"
    Eu escrevo as links normalmente no meu blog, e por exemplo para esse teste, eu escrevi
    Código:
    <a href="http://joaojeronimo.freehostia.com/?p=spread"></a>
    e para quem for ao meu blog pode notar isso...

    O blog usa uma base de dados SQLite, e o script para postar é
    PHP:
    <?php
    $title 
    sqlite_escape_string($_POST["title"]);
    $body sqlite_escape_string($_POST["body"]);
    $date sqlite_escape_string($_POST["date"]);
    $file "../includes/blog.db";
    $db = new SQLiteDatabase($file) or die("Could not open database");

    // create database if it does not exist
    // $db->query("CREATE TABLE posts (id INTEGER PRIMARY KEY, title VARCHAR(255) NOT NULL, body VARCHAR(255) NOT NULL, date VARCHAR(255) NOT NULL)") or die("Error in query");

    $db->query('INSERT INTO posts (title, body, date) VALUES (\''.$title.'\',\''.$body.'\',\''.$date.'\')') or die("Error in query");
    echo 
    "<i>Base de dados actualizada com sucesso!</i>";
    unset(
    $db);

    ?>
    O script para ler os posts da base de dados e exibi-los é
    PHP:
    <?php
    print'<h2>este é o meu blog...</h2>';
    print
    '<h3>aviso desde já que não tem nada de especial =P</h3><br class="c1" />';
    $file $SERVER["DOCUMENT_ROOT"]."includes/blog.db";
    $db = new SQLiteDatabase($file) or die("Não foi possivel abrir a base de dados");

        
    $query "SELECT * FROM posts ORDER BY id DESC LIMIT 5";
        
    $result $db->query($query) or die("Erro na query");
        if (
    $result->numRows() > 0) {
            while(
    $row $result->fetch()) {
                print 
    '<div class="item"><h4><a href="?p=blog&amp;post='.$row[0].'">'.$row[1].'</a></h4><p>'.$row[2].'</p><p style="font-size:80%">'.$row[3].'</p></div><br class="c1" />';
            }
        }
    unset(
    $db);
    ?>
    Tudo muito simples. Alguém pode ajudar-me a resolver o problema ? Se precisarem de mais dados é só pedir que eu dou...

    Obrigado
     
  2. shello

    shello Moderador
    Staff Member

    Já experimentaste em vez de
    Código:
    <a href="http://joaojeronimo.freehostia.com/?p=spread"></a>
    usar
    Código:
    <a href="/?p=spread"></a>
    ?
    Não sei se vai ajudar, mas nada melhor que tentar ;)
     
  3. OldMan

    OldMan Power Member

    Não tenho a certeza do que vou dizer, mas acrescentar uma "/" antes do "?" não resolverá?

    edit: too late
     
  4. joaopj

    joaopj Power Member

    Já tentei os dois métodos... Mais alguma ideia ?
    Não será por causa do sqlite_escape_string aqui: ?

    PHP:
    $title sqlite_escape_string($_POST["title"]);
    $body sqlite_escape_string($_POST["body"]);
    $date sqlite_escape_string($_POST["date"]);
    Estranho porque isto é recomendado até para prevenir falhas de segurança...
    O que será ?
     
  5. joaopj

    joaopj Power Member

    Aparentemente também não é por causa do sqlite_escape_string... Acabei de tentar sem ele agora e dá no mesmo... Será que eu devia tentar fazer um serialize ?

    Não... também tentei um serialize e não funcionou...
     
    Última edição: 3 de Setembro de 2007
  6. shello

    shello Moderador
    Staff Member

    Isto agora pode ser um pouco nonsense, mas o conteúdo do texto está a ir com o mesmo char encoding para a DB (ou seja, ser igual na DB e na página que envias o conteúdo/que o é feito output)?
     
  7. joaopj

    joaopj Power Member

    Sim, está...




    Edit:

    Hummm tou com uma pista...
    É interessante, sempre que eu posto
    no blog vai aparecer
    e
    no blog aparece
    Pondo um \ antes de ' e ", é a maneira de fazer o escape destes caracteres em PHP, como podemos ver em http://www.php.net/types.string na tabela das sequências de escape...

    É o mesmo que acontece nos links.....
    O que será que está a causar isto, e como posso resolver ?
     
    Última edição: 3 de Setembro de 2007
  8. joaopj

    joaopj Power Member

    Actualização: Consegui resolver.... bom... exactamente resolver não, mas "dei um jeito"...

    PHP:
    $file $SERVER["DOCUMENT_ROOT"]."includes/blog.db";
    $db = new SQLiteDatabase($file) or die("Não foi possivel abrir a base de dados");

    $search = array('\"',"\'");
    $replace = array('"',"'");

        
    $query "SELECT * FROM posts ORDER BY id DESC LIMIT 5";
        
    $result $db->query($query) or die("Erro na query");
        if (
    $result->numRows() > 0) {
            while(
    $row str_replace($search,$replace,$result->fetch())) {
                print 
    '<div class="item"><h4><a href="?p=blog&amp;post='.$row[0].'">'.$row[1].'</a></h4><p>'.$row[2].'</p><p style="font-size:80%">'.$row[3].'</p></div><br class="c1" />';
            }
        }
    unset(
    $db);
    Até agora aquele str_replace está a funcionar, mas de certeza que esta não é a melhor solução... O que vocês acham ?
     

Partilhar esta Página