2010-06-17 21 views
5

Sto avendo un po 'di problemi. Sto cercando di creare un bot IRC, che ha una e commerciale nella sua password. Tuttavia, ho problemi a inserire la e commerciale in una stringa. Per esempio ...PHP e commerciale in stringa

<?php 

$var = "g&abc123"; 

echo $var; 

?> 

Credo che questo dovrebbe stampare g&abc123. Tuttavia sta stampando g.

Ho provato anche questo:

<?php 
$arr = array("key" => "g&abc123"); 
print_r($arr); 
?> 

Questo lo stampa correttamente con il g&abc123, però quando dico echo $arr['key']; esso stampa g di nuovo. Qualsiasi aiuto sarebbe apprezzato. Sto eseguendo PHP5.3.1.

EDIT: Inoltre, ho appena notato che se uso g&abc123&abc123 la stampa g&abc123. Eventuali suggerimenti?

+0

Dove viene emesso questo output? –

+0

Ho provato su PHP 5.2.9 e funziona bene .... ora questo è uno strano. – websch01ar

risposta

5

io non ho quel problema in una console:

php > $d="g&abc123"; 
php > echo $d; 
g&abc123 

Quale ambiente sono si stampa l'output? Sembra che tu lo stia visualizzando in un browser web e & viene interpretato come un'entità HTML non valida. Prova a sostituire il simbolo & con la versione codificata dell'entità &amp;.

+0

Hai ragione, sto stampando sul browser. Tuttavia, non fa parte di un tag HTML, link, ecc. È solo l'unico testo sulla pagina. Inoltre, ho provato con & e visualizzato correttamente. Sfortunatamente, questo è un problema perché ho bisogno di inviare i dati a un server, e non sono sicuro che venga inviato come g & abc123 o se viene inviato come g, e non posso inviare g & abc123. –

+1

Puoi trasformare automaticamente il testo in questo modulo con la funzione PHP htmlentities e decodificare con html_entity_deocode - vedi http://php.net/manual/en/function.html-entity-decode.php Se lo stai mandando da qualche parte, ecc. puoi essere sicuro che il valore inviato è il valore mostrato da print_r. – JAL

+1

Hai ragione. Ho provato questo in Firefox e non succede. Sembra essere un problema di Chrome. Grazie! –

5

Guardare il codice sorgente, stamperà il codice corretto.

Se si desidera stampare correttamente in formato HTML, quindi eseguire htmlentities su di esso o fare la & &amp;

+0

Ho controllato il codice sorgente, dice solo 'g'. –

+1

Quindi qualcosa non va con il tuo server: l'ho appena testato (copiato e incollato il tuo codice): http://www.phoenixdev.net/test-2.php –

+0

No Kerry, in Chrome ottengo gli stessi risultati. ;) Tuttavia non succede in Firefox. –

1

Visualizzare l'origine della pagina Web per assicurarsi che la variabile contenga il valore corretto.

+0

L'ho fatto 18 minuti fa ... –

1

Probabilmente stai inviando l'output a un browser web.

Il modo corretto di farlo è

In HTML, XHTML e XML, la e commerciale ha un significato speciale. È usato per le entità di carattere. Puoi pensare ad esso come una sequenza di fuga di sorta.

Per esempio, in PHP, questo sarebbe illegale:

$variable = 'It's Friday'; 

Questo perché l'apostrofo è interpretato da PHP come la fine della stringa, e il resto del suo sito web sembra spazzatura.

invece, che hai da dire:

$variable = 'It\'s Friday'; 

Allo stesso modo, in HTML e XHTML, non si può dire

<h1>Inequalities</h1> 
<p> x<yz+3 </p> 

Questo perché sarebbe interpretata come un elemento.

Invece, dovreste dire:

<h1>Inequalities</h1> 
<p> x&lt;yz+3 </p> 

Ora, come si può vedere, la e commerciale in sé ha un significato speciale e, quindi, deve essere sfuggito come &. htmlspecialchars() lo farà per te.

+0

Beh ... conosco gli esempi PHP ... So anche che non ha alcun problema in Firefox. Capisco che in XHTML (e probabilmente anche in HTML) & è il modo corretto per farlo. Ma non ho mai avuto un browser arrabbiato perché non è stato fatto in quel modo. Fidati di me, se stavo cercando di rendere questo XHTML valido, sarebbe un &, ma lo stavo usando solo per scopi di debug. –

+0

Sfortunatamente, i browser sono stati progettati per accettare qualsiasi cosa tu passi loro, ma il modo in cui viene gestito è soggetto a interpretazione. Il team HTML5 sta cercando di creare uno standard per la gestione del "tag soup" ... Personalmente non ne sono molto contento, ma cosa posso fare? Ti consiglio di creare un alias per echo htmlspecialchars ($ text); Esempio: function h ($ text) {echo htmlspecialchars ($ text); } – MapDot

Problemi correlati