Problema: Come filtrare e non far eseguire completamente gli script di Google Adsense (o cmq roba di Google)?

17 contenuti / 0 new
Ultimo contenuto
Problema: Come filtrare e non far eseguire completamente gli script di Google Adsense (o cmq roba di Google)?
AllegatoDimensione
Image icon test-teaser.png224.24 KB
Image icon test-fullnode.png334.7 KB

Ciao,
sto tentando in tutti i modi di rimuovere dai content aggregati dai feed gli Script per la pubblicità di Google.

Se uso un Filtered HTML, dove non viene consetito l'uso del tag <script> ottengo un ottimo risultato quando il content è pienamente aperto.

Purtroppo però, quando viene mostrato il teaser, mi ritrovo (ovviamente), con il content non mostato, tranne un link su l'Anchor "Ads by Google" che firebug mi mostra come <div><a>Ads by Google</a></div><p></p>

Io voglio correggere questo problema del teaser. Le cause sono dovute al fatto che, sebbene il filtro non mostra/esegue contenuto racchiuso da un tag specifico, quando vi è un interruzione ad un certo punto (break del teaser), che fa perdere tutto quello che segue, il filtro non funziona + correttamente. In più, dato che viene impostato un numero di carratteri per il teaser, succede che a quel punto drupal va a cercarsi il paragrafo chiuso (<p></p>) che precedere il limite di caratteri per il teaser, che in questo caso specifico è praticamente inesistente, xkè vorrebbe dire tagliare all'inizio del content (a causa del codice di Google).

Avete un'idea di come gestire questo problema?

Si tratta di una cosa che non essendo ancora risolta, produce tantissimo lavoro manuale indotto, che a mio avviso non dovrebbe esistere.

Se non sono stato chiaro nel descrivere il problema, fatemelo sapere.

Guardate le immagini in allegato per capire la differenza tra ciò che viene mostrato nel teaser di test e nel full content dello stesso nodo.

Perche' non filtri direttamente da node.tpl.php usando una preg_replace su $node->content?

Fammi vedere un esempio concreto.
la stringa da eliminare non è di 2 parole... è un blocco di codice di un bel pò di righe (tutto il codice di goole).

Se nel subject da inserire in preg_replace è possibile inserire caratteri speciale per Esempio. <script>*</script> allora la cosa diventa fattibile. Altrimenti non ho idea di come fare.

Ragazzi, nessun'altra idea?

c'è da sbattersi la testa al muro!!!!

Altre idee?

Questa cosa mi sta dannando l'esistenza!!!... Nessuno che ha idee per risolvere il problema? C'è qualche spiraglio?

jscm, io ti ho dato l'idea.. poi pero' devi entrare nei dettagli da solo.

Cercare su google preg_replace avrebbe portato a dei buoni risultati, tipo:
http://php.net/manual/en/function.preg-replace.php dove ci sono un milione di esempi sull'uso della funzione

http://www.codingforums.com/archive/index.php/t-116411.html un'esempio pratico dell'uso di preg_replace per rimuovere script

io sono entrato nel dettaglio... ma mi sono scontrato su come far capire a preg-replace tutto il contentuto dei tag <script></script> che non è sempre uguale.

Stando al secondo link: preg_replace("/.*?<\/script>/im","",$page);

Direi che non ha proprio funzionato...

$content1 = preg_replace("/<script.*?>.*?<\/script>/im", "", $content);
print $content1;

tramite firebug riscontro la presenza dei tag script e del loro contenuto.

Purtroppo non sono un'esperto di espresioni regolari quindi non ci capisco una mazza.

Non è che forse devo fare + passate sul $content x rimuovere tutti gli script?

Leggi bene il secondo post che ti ho linkato. L'ultima regex a cui giungono e' simile a:
$content1 = preg_replace("/<script.*?>.*?<\/script>/xmsi", "", $content);

Se lanciata sull'html della homepage del mio sito personale http://www.varesano.net/ strippa via correttamente tutte le istanze di script, siano adsense, google analytics o linking di script vari.

Il tutto e' dimostrato da questo file php: http://pastebin.com/ejwiURpV

Adesso sembra funzionare, anche se non ho ben capito tutta la questione delle espressioni regolari, in particolare non ho capito /xmsi

Adesso mi sorge una nuova domanda...
... come faccio a trovare la collocazione giusta, il file giusto, per la stringa uguale o simil a

$content1 = preg_replace("/<script.*?>.*?<\/script>/xmsi", "", $content);

in modo tale che Drupal non conteggi le stringhe strippate quando va a calcolarsi il punto in cui tagliare il content per generare il teaser?

Oppure c'è la possibilità di agire in modo tale che all'interno del DB il content venga immagazzinato con le stringhe già rimosse?

Se si risolvesse questa cosa, sarebbe fantastico.

Mi vengono in mente 2 possibilita':

  • Scrivere un modulo che implementi hook_nodeapi e che reagisca all'inserimento di un contenuto aggregato durante la fase 'insert' nel db e poi filtri via usando la regex sopra. In questo modo il nodo verrebbe gia' memorizzato "depurato".
  • Semplicemente in node.tpl.php depurare la variabile $content dalla stringa che Drupal non e' riuscito di per se a depurare. In pratica si stampa nel tema solo la parte di teaser che interessa e non quella con "ads by Google"

Il punto 1 non lo so, ma il punto 2 a quel modo non è possibile, perchè in ogni caso il numero di caratteri è settato e quindi il content x il teaser viene tagliato prima che giunga a node.tpl.php.