2013-11-20 15 views
7

Le risposte migliori che sono riuscito a trovare per questo problema utilizzano XSLT, ma non sono sicuro di come applicare tali risposte al mio problema.Evitare gli attributi href di codifica percentuale quando si utilizza il DOMDocument di PHP

Fondamentalmente, DOMDocument sta facendo un buon lavoro di escape degli URL (negli attributi href) che vengono passati, ma in realtà lo sto usando per creare un modello di stile Twig/Django, e preferirei lasciarli soli . Ecco un esempio specifico, che illustra il "problema":

<?php 
$doc = new DOMDocument(); 
$doc->loadHTML('<html><body>Test<br><a href="{{variable}}"></a></body></html>'); 
echo $doc->saveHTML(); 

che emette il seguente:

<html><body>Test<br><a href="%7B%7Bvariable%7D%7D"></a></body></html> 

E 'possibile NON cento-codificare l'attributo href?

Se non è possibile direttamente, è possibile suggerire una soluzione concisa e affidabile? Sto facendo un'altra elaborazione e l'utilizzo di DOMDocument dovrà rimanere. Quindi forse un trucco pre/post-elaborazione?

+0

DOM è grande per la manipolazione di un documento esistente, ma per edilizia un nuovo documento da zero, è meglio usare solo le operazioni con le stringhe, specialmente quando si costruisce un "modello che assomiglia a html". –

+0

In realtà sto manipolando un documento esistente. Questo è il codice di esempio più breve che illustra chiaramente il problema. –

+0

Essenzialmente la stringa utilizzata in questo esempio potrebbe essere stata caricata con 'file_get_contents()', * per esempio *. –

risposta

2

Io non sono felice con la soluzione/dotto-tape 'trucco', ma questo è il modo Attualmente sto risolvere il problema:

function fix_template_variable_tokens($template_string) 
{ 
    $pattern = "/%7B%7B(\w+)%7D%7D/"; 
    $replacement = '{{$1}}'; 
    return preg_replace($pattern, $replacement, $template_string); 
} 

$html = $doc->saveHTML(); 
$html = fix_template_variable_tokens($html); 
+0

Sì, ma è meglio della soluzione 'urldecode': D – Epoc

Problemi correlati