Apici, URL e problemi

Diego Aguiari

Nuovo Utente
23 Giu 2013
14
0
0
Salve,

Ho un problemuccio sulla generazione di un link e non ho la più pallida idea di come risolverlo.

Praticamente sto creando un sito di annunci (compravendita informatica), ed ho problemi a gestire l'url di una regione, la Valle d'Aosta che contiene un apice, e ciò non piace molto alla funzione che genera il link, in quanto genera il link così :search/region,Valle%20d'Aosta/
che ovviamente non funziona perchè richiede il doppio apice ovvero: search/region,Valle%20d''Aosta/

Adesso dato il database così composto:https://www.dropbox.com/s/du1weqi2t...baseregioni.png

E data la funzione che genera il link:

codice PHP:
PHP:
function osc_search_url($params = null) { 
        if(osc_rewrite_enabled()) { 
            $url = osc_base_url().osc_get_preference('rewrite_search_url'); 
            if($params!=null) { 
                $url .= "/"; 
                foreach($params as $k => $v) { 
                    switch($k) { 
                        case 'sCountry': 
                            $k = osc_get_preference('rewrite_search_country'); 
                            break; 
                        case 'sRegion': 
                            $k = osc_get_preference('rewrite_search_region'); 
                            break; 
                        case 'sCity': 
                            $k = osc_get_preference('rewrite_search_city'); 
                            break; 
                        case 'sCityArea': 
                            $k = osc_get_preference('rewrite_search_city_area'); 
                            break; 
                        case 'sCategory': 
                            $k = osc_get_preference('rewrite_search_category'); 
                            if(is_array($v)) { 
                                $v = implode(",", $v); 
                            } 
                            break; 
                        case 'sUser': 
                            $k = osc_get_preference('rewrite_search_user'); 
                            break; 
                        case 'sPattern': 
                            $k = osc_get_preference('rewrite_search_pattern'); 
                            break; 
                        default: 
                            break; 
                    } 
                    if($k!='page') { 
                        $url .= $k.",".$v."/"; 
                    } 
                } 
            } 
        } else { 
            $url = osc_base_url(true) . '?page=search'; 
            if($params!=null) { 
                foreach($params as $k => $v) { 
                    if( is_array($v) ) { 
                        foreach($v as $aux) { 
                            $url .= "&" . $k . "[]=" . $aux; 
                        } 
                    } else { 
                        $url .= "&" . $k . "=" . $v; 
                    } 
                } 
            } 
        } 
        return $url; 
    }

Cosa posso fare affinchè l'url di ricerca della valle d'aosta funzioni correttamente?

Per capire meglio l'errore che si genera lascio il dominio del sito tecnomercatino.it, senza link per evitare spam inutile, basta cliccare su valle d'aosta sull'homepage e si palesa subito l'errore. Se si sostituisce nella barra degli indirizzi "valle d'aosta" con ''valle d''aosta" tutto funziona(all'incirca).

Il mio obbiettivo sarebbe rendere i link del tipo valle%20d-aosta oppure valle-d-aosta (penso che entrambe sia valide per il posizionamento sui motori di ricerca)

Il problema è che far generare in automatico il link a "valle d''aosta" è un casino in quanto uso un CMS e i link se li autogenera attingendo al nome delle regioni nel database.

Ho notato che alcuni siti di annunci famosi gestiscono l'url della valle d'aosta come valle-d-aosta... ma non saprei come farlo sul mio sito

Qualsiasi aiuto è ben accetto^^

Grazie in anticipo :)

PS: se servono spezzoni di codice o altri screenshot per capire meglio il problema fatemi sapere

PS2: questo è un link ad una cartella di dropbox contenente tutti i file che vengono usati per la creazione di un link per una regione https://www.dropbox.com/sh/zo8i6o97p12m1mj/GJJcAckLsn

PS3: (giuro che è l'ultimo) se può servire uso un CMS recente chiamato OSclass :)
 
l'unica cosa che mi sento di dirti se hai usato addslashes ( stringa con apici ) ma visto che usi un csm... ti dico auguroni , cmq fammi sapere ciao
 
l'unica cosa che mi sento di dirti se hai usato addslashes ( stringa con apici ) ma visto che usi un csm... ti dico auguroni , cmq fammi sapere ciao

Nella mia più totale ignoranza, dove posso vedere se hanno usato addslashes? :) Comunque in teoria non è una funzione che aggiunge \ quando trova un apice un doppio apice o comunque un carattere che non piace particolarmente al database?

Perchè ho provato a farne una versione a "mano" esattamente così: http://www.tecnomercatino.it/search/region,Valle d\'Aosta/

Il grosso, immenso problema di questa cosa è:
1) non funziona su chrome (sostituisce il \ con / e ovviamente non esegue la query)
2) a quanto pare il cms invece di prendere i nome direttamente dal database per stampare ogni occorrenza di tali nomi.. li prende dall'url (non chiedetemi perchè), perciò nell'esempio sopra mi ritrovo stampato ovunque Valle d\'Aosta invece di Valle d'Aosta e ammettiamo che graficamente non è proprio professionale xD

Ma ho notato che su quasi tutti i siti di annunci, le regioni italiane vengono trattate in questo modo trentino-alto-adige, valle-d-aosta ecc.. e ciò potrebbe essere utile anche per le città particolarmente ostiche l-aquila per esempio, però non so se tale cosa è ottenuta tramite delle condizioni sul rewrite, o ad altro.

Ancora grazie :)
 
esiste anche questa htmlspecialchars() te lo converte in codiifca html...
 
Si ma non credo sia quello il problema, il mio problema è che ho un apice nell'url e ciò crea un conflitto non mostrandomi la pagina voluta U.u

Cioè non vedo quale sia l'utilità di convertire un url in html :)
 
io credo che tu non lo sappia neanche esporre il tuo problema è questo il punto forse ti conviene chiedere aiuto a google :byebye:
 
io credo che tu non lo sappia neanche esporre il tuo problema è questo il punto forse ti conviene chiedere aiuto a google :byebye:

Ma il mio problema è semplicissimo (cioè da spiegare), praticamente se il CMS genera un url di una regione e/o città che nel suo nome contiene un apostrofo il link generato non funziona.
Se io manualmente nell'url aggiungo un apice dov'è presente l'apostrofo allora tutto funziona, tranne che per degli errori di stampa sul sito. Il problema è come faccio ad evitare questo problema? :)
 
vedi che non si capisce dove sia il problema, devi essere più chiaro .... se sei più chiaro forse posso aiutarti
 
Ho trovato una soluzione, la posto caso mai qualcuno si trovasse nei miei stessi casini :)


Praticamente bisogna andare a modificare questa funzione:

PHP:
function osc_region_url();

che è contenuta in OC-includes/osclass/helpers/hlocation.php

e implementarla così:
PHP:
function osc_region_url() 
	{
        if ( osc_rewrite_enabled() ) {
            $url = osc_base_url();
            if( osc_get_preference('seo_url_search_prefix') != '' ) {
                $url .= osc_get_preference('seo_url_search_prefix') . '/';
            }
            $url .= osc_sanitizeString(osc_region_name()) . '-r' . osc_region_id();
            return $url;
        } else {
            return osc_search_url( array( 'sRegion' => osc_region_id() ) );
        }
    }
Praticamente la query viene eseguita per ID e non più per nome, e poi viene generato un friendly url così composto /nomeregione r-IDregione/

Inoltre visto che se avete questo problema 100 su 100 avrete anche un problema sulla ricerca( cercando province o regioni con l'apostrofo non ve le trova) vi posto anche il codice che ho usato per ovviare al problema:

Andate in oc-content/themes/ilvostrotema/search.php

trovate qualcosa di simile a questo
PHP:
<div class="row one_input">
                                <h6><?php _e('City', 'italia'); ?></h6>
                                <input type="text" id="sCity" name="sCity" value="<?php echo  osc_search_city(); ?>" />
                            </div>

E sostituitelo con questo:

PHP:
<div class="row one_input">
								<h6><?php _e('City', 'modern'); ?></h6>
								<?php
										$aRegions = Region::newInstance()->getByCountry('IT');
										if(count($aRegions) > 0 ) { 
										echo '<select name="sCity" id="sCity">'."\n"
											.'<option value="">Tutte le Province</option>'."\n";
										foreach($aRegions as $region) {
										echo '<optgroup label="'.$region['s_name'].'">'."\n";
											$aCities = City::newInstance()->getByRegion($region['pk_i_id']);
										  foreach($aCities as $city)          
										echo '<option value="'.$city["pk_i_id"].'">'.$city["s_name"]."</option>\n";
									  echo "</optgroup>\n";
										}
										echo "</select>\n";
									  }
									?>
                            </div>

Se avete usato una rollover map come ho fatto io dovete andare a modificare i singoli link alle regioni :)

In teoria altri problemi (almeno per regioni e province non dovrebbe darvene) :)
 

Discussioni simili