Visualizzazione risultati 1 fino 5 di 5

Discussione: Impossibile sostituire carattere con slash

  1. #1
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito Impossibile sostituire carattere con slash

    salve,

    Avrei la necessità di sostituire, all'interno della stringa il carattere punto con uno slash, provando questo codice:

    Codice:
    <?php
    $dir = str_replace(".", "/" . $_GET["dir"]);
    var_dump($dir);
    ?>
    La variabile $dir mi ritorna NULL, ho provato anche con str_replace(".", "//", $_GET["dir"]), ma niente.

    In pratica, da una stringa directory.subdirectory vorrei ottenere questo: directory/subdirectory, come posso fare?

    Sevenjeak
    Software developer and much more

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

    Predefinito

    Salve,
    str_replace() dispone di 3 argomenti e lì ne manca uno, a prescindere dal fatto che il punto sia stato messo erroneamente al posto della virgola, quindi mi sembra normale che ritorni con NULL.

    A me risulta funzionare correttamente in entrambi i modo se provo ad esempio:
    Codice PHP:
    <?php
    $path
    = "directory.subdirectory";
    $dir = str_replace(".", "/", $path);
    $dir2 = str_replace(".", "//", $path);
    var_dump($dir." - ".$dir2);
    ?>
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 29-07-2022 alle ore 16.30.01

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

    Predefinito

    https://www.php.net/manual/en/langua...s.variable.php cioè qualsiasi valore di tipo peraltro (stringa, null, boolean etc.).
    In the "query" component of a URI (the part after a ? character), for example, / is still considered a reserved character but it normally has no reserved purpose, unless a particular URI scheme says otherwise. The character does not need to be percent-encoded when it has no reserved purpose.
    Esempio: http://www.domain.tld/?name=.valore
    Poiché il nome del file della query è assente potrebbe trattarsi del file index.php o se il webserver da preferenza e esistono index.html o index.htm o qualsiasi cosa configurata per la direttiva.

    Se http://www.domain.tld/?name=.valore
    Codice PHP:
    <?php
    var_dump
    ($_GET['name']); // .valore
    $dir = strtr('.', '/', $_GET['name']); // /valore
    $costruzione_query = 'https://www.domain.tld/?' . urlencode($dir);
    var_dump($costruzione_query); // https://www.domain.tld/?name=%2Fvalore
    ?>
    Peraltro utile a non far bloccare Apache se la direttiva directoryslash è attiva (il bug è per il carattere / e o ? presente nella query) https://httpd.apache.org/docs/trunk/...directoryslash

    Esempio 2 alla stessa uri ma $_GET usa internamente urldecode.

    Se https://www.domain.tld/?name=%2Fvalore
    Codice PHP:
    <?php
    var_dump
    ($_GET['name']); // /valore
    ?>
    Poiché $_GET['dir'] non esiste e credo nemmeno chiamato dal browser in questo modo https://www.domain.tld/?dir=%2Fvalore php l'indice assente di predefinito lo imposta alla costante NULL.

    Esempio 3
    Codice PHP:
    <?php
    $dir
    = str_replace(".", "/", NULL);
    var_dump($dir); // string (0)
    ?>
    Ultima modifica di darbula : 29-07-2022 alle ore 17.25.34

  4. #4
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Ops.. scusate, solo ora mi sono accorto di aver messo, prima del terzo argomento, il punto e non la virgola, scusate ancora per lo sbaglio, fatto un pò per la fretta nel scrivere il codice, e grazie per l'aiuto

    Sevenjeak
    Software developer and much more

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

    Predefinito

    Quando il problema è misterioso, aggiungere un error_reporting(E_ALL); in cima allo script puoi darti un sacco di informazioni!

Regole di scrittura

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