Visualizzazione risultati 1 fino 9 di 9

Discussione: PHP sostituisce lo slash nella print con uno spazio?

  1. #1
    Data registrazione
    27-08-2019
    Messaggi
    21

    Predefinito PHP sostituisce lo slash nella print con uno spazio?

    salve
    premetto che di php non ne so molto, ma le ho tentate tutte per venirne a capo.
    - uso una pagina.php dato che in una pagina.html il codice php viene stampato e non eseguito.
    - il file sul server è corretto (ovvero non ha subito alterazioni in ftp)
    ma in esecuzione, negli URL, tutti gli / spariscono.

    quest'istruzione php:
    Codice PHP:
    print"<li><a href="#" onclick="loadpage("\/utente\/file.pdf")">file.pdf<\/a><\/li>";
    dovrebbe produrre:
    Codice:
     <li><a href="#" onclick="loadpage("/utente/file.pdf")">file.pdf</a></li>
    invece produce questo:
    Codice:
     <li><a href="#" onclick="loadpage(" utente file.pdf")">file.pdf</a></li>
    che l'inspect, copiato l'outherHTML, da questo risultato:
    Codice:
    <li><a href="#" onclick="loadpage(" \="" utente\="" file.pdf")"="">
    </a>
    </li>
    qualcuno saprebbe dirmi se e in cosa sto sbagliando?
    grazie

    forse ho postato nel posto sbagliato.
    lo sposto sotto php ... (scusate)
    Ultima modifica di alemoppo : 12-11-2022 alle ore 14.58.37

  2. #2
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    3,998

    Predefinito

    - uso una pagina.php dato che in una pagina.html il codice php viene stampato e non eseguito.
    Salve,
    preciso che volendo, è possibile abilitare l'eseguzione di codici php in pagine html. Basta aggiungere nel file .htaccess qeasta direttiva:

    Codice:
    AddHandler av-php73 .html
    AddHandler av-php73 .htm
    av-php73 sta per php 7.3, quindi può essere cambiato con la versione che si preferisce tra quelle supportate (che sono: 5.6 - 7.1 - 7.3 - 8.0).

    A me non risulta quel comportamento descritto, sia usando print che echo. demo

    Il problema è dovuto forse all'uso improprio dei doppi apici :
    Codice:
    onclick="loadpage("/utente/file.pdf")"
    Le conviene fare una struttura a blocchi:
    Codice PHP:
    <?php
    // codice php
    ?>

    <li><a href="#" onclick="loadpage('/utente/file.pdf')">file.pdf</a></li>

    <?php
    // codice php
    ?>
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 12-11-2022 alle ore 14.02.19

  3. #3
    Data registrazione
    20-04-2014
    Messaggi
    149

    Predefinito

    Citazione Originalmente inviato da giornalinothewest Visualizza messaggio
    Codice PHP:
    print"<li><a href="#" onclick="loadpage("\/utente\/file.pdf")">file.pdf<\/a><\/li>";
    Ciao.
    Aggiungo alla risposta precedente.
    La sintassi evidenziata del tuo codice dovrebbe già suggerire la risposta, anzi, mi sorprendo che PHP non abbai bloccato l'esecuzione del codice con un errore.
    Intanto usa i tag di apertura di PHP, sì anche sul forum.
    Codice PHP:
    <? print"<li><a href="#" onclick="loadpage("\/utente\/file.pdf")">file.pdf<\/a><\/li>";
    chiaro?
    ci sono due " consecutivi senza escaping.
    hai due alternative
    Codice PHP:
    <? print"<li><a href=\"#\" onclick=\"loadpage('/utente/file.pdf')\">file.pdf</a></li>";
    oppure
    Codice PHP:
    <? print'<li><a href="#" onclick="loadpage(\'/utente/file.pdf\')">file.pdf</a></li>';
    L'escape di / nel JS credo sia opzionale.

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,259

    Predefinito

    Guarda con attenzione la colorazione della sintassi:
    Codice PHP:
    print"<li><a href="#" onclick="loadpage("\/utente\/file.pdf")">file.pdf<\/a><\/li>";
    Il testo "<li><a href=" è in rosso, ma #" onclick="loadpage... diventa arancione.
    Codice PHP:
    print "<li><a href=" #" onclick="loadpage("...
    Quello che succede è che il secondo " chiude la stringa, il resto della riga diventa un commento, e mancando un ; alla fine della riga (è commentato!) questa si mischia alla successiva. Il risultato è output un po' rotto.

    Per risolvere il problema puoi modificare il codice come suggerito sopra, oppure "proteggere" le virgolette all'interno della stringa
    Codice PHP:
    print "<li><a href=\"#\" onclick=\"loadpage(\"\/utente\/file.pdf\")\">file.pdf<\/a><\/li>";
    Ultima modifica di dreadnaut : 12-11-2022 alle ore 15.21.55

  5. #5
    Data registrazione
    27-08-2019
    Messaggi
    21

    Predefinito

    ringrazio tutti per le direttive!
    Ora provo a rivedere il codice.
    Mi dite, per piacere, quale editor evidenzia cosi la sintassi del codice?

  6. #6
    Data registrazione
    27-08-2019
    Messaggi
    21

    Predefinito

    ho aggiornato .htaccess come consigliato
    non credo possa strutturare perchè è lo script che genera la print <li> ... </li>
    in ogni caso grazie!

  7. #7
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,259

    Predefinito

    Citazione Originalmente inviato da giornalinothewest Visualizza messaggio
    Mi dite, per piacere, quale editor evidenzia cosi la sintassi del codice?
    Ce ne sono numerosi, ognuno con pro e contro. Guarda magari VS Code o Notepad++.

    Nota anche che PHP ti permette di mischiare codice ed HTML. Ad esempio per un elenco di link potresti scrivere:
    Codice PHP:
    <?php
    $utente
    = "X"
    $allegati = [ ... ];
    ?>

    <ul class="elenco-allegati">
    <?php foreach ($allegati as $file): ?>
    <li class="allegato">
    <a href="/<?= utente ?>/<?= $file ?>" download><?= $file ?></a>
    </li>
    <?php endforeach ?>
    </ul>

    <?php
    // codice php
    ?>
    Dove <?= ... ?> equivale a <?php echo ... ?>, e
    Codice HTML:
    <a href="[...]" download>...</a>
    dice al browser di scaricare il file, invece di navigare al link.
    Ultima modifica di dreadnaut : 12-11-2022 alle ore 17.49.26

  8. #8
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Le variabili stringa php

    Codice PHP:
    <?php

    // Input
    $var = 'testo da stringa originale esempio
    1\\'
    ;
    var_dump($var); // Output testo da stringa originale esempio 1\
    $copy = $var;
    var_dump($copy); // Output testo da stringa originale esempio 1\

    $var2 = 'testo tra apice singolo \'';
    var_dump($var2); // Output testo tra apice singolo '
    $copy2 = $var2;
    var_dump($copy2); // Output testo tra apice singolo '
    var_dump(addslashes($var2)); // Output testo tra apice singolo \'

    ?>
    Il backslash è il carattere di fuga e serve per creare stringhe per la sintassi di php,
    addslashes($var2); aggiunge il carattere backslash, mentre senza addslashes se devi rappresentare il carattere backslash devi raddoppiarlo.

    Il tuo script locale sta creando una stringa errata, poiché il backslash letterale si usa su sistemi operativi Windows o derivati mentre Su Unix like è il carattere slash.
    (Stringa letterale cioè quello che vedono i tuoi occhi o il browser)
    Quindi Windows C:\utente\
    Mentre Linux /utente/
    Che poi una stringa php racchiusa dentro apici doppi usa il carattere di fuga quando ci sono occorrenze di apice doppio è tutt'altra storia. Il tuo script è sbagliato a monte

    Adesso supponi che esiste il file prova.pdf dentro la cartella utente.
    Unix /utente/prova.pdf
    Windows C:\utente\prova.pdf
    O Windows supporta anche il carattere slash C:\utente/prova.pdf
    Ricordi questo è ciò che vedono i tuoi occhi non la stringa racchiusa da apici php. Se da apici php la versione di Windows è $var = 'C:\\utente/prova.pdf';
    Mentre con l'operatore di assegnazione devi usare addslashes $assegnazione = addslashes($var);
    Secondo suggerimento:
    Inoltre il markup HTML (o detto impropriamente i tag HTML) consentono parte ma non tutti i possibili caratteri e l'attributo href non è immune da esso.

    Terzo suggerimento:
    L'elemento o attribuito HTML consente stringa racchiusa da apice (se l'elemento o l'attributo utilizza apice non può apparire lo stesso tipo di apice poiché deve terminare la fine della stringa) non può "testo"" ma "testo'" etc.
    Ultima modifica di darbula : 12-11-2022 alle ore 18.52.40

  9. #9
    Data registrazione
    27-08-2019
    Messaggi
    21

    Predefinito

    Grazie per tutti i consigli.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •