2013-04-04 7 views
6

Naturalmente questo è stato chiesto prima e hanno cercato soluzioni, tutte le quali non hanno funzionato finora. Voglio cambiare il simbolo TM e la commerciale ai loro equivelents html utilizzando htmlentities o htmlspecialchars:PHP htmlentities non funziona anche con i parametri

$TEST = "Kold Locker™ & other stuff"; 
echo "ORGINIAL: " . $TEST . "<BR/>"; 

echo "HTML: " . htmlentities($TEST, ENT_COMPAT, 'UTF-8'); 

Questo mostra:

ORGINIAL: Kold Locker™ & other stuff 
HTML: 

Ho anche provato con htmlspecialchars e il secondo parametro cambiato con lo stesso risultato.

Cosa mi manca che altri hanno affermato hanno funzionato in altre soluzioni?

UPDATE: Ho provato solo la visualizzazione utf8_encode($TEST) ed è visualizzata HTML: Kold Locker™ & other stuff

+0

Set display_errors a '1' e impostare error_reporting a' E_ALL'. Stai probabilmente ricevendo un messaggio di errore. – Halcyon

+0

quale versione di PHP? – Prisoner

+0

Ho verificato la segnalazione degli errori con nessuno elencati – ToddN

risposta

2

Il codice funziona per me: -?

Nel manual page for htmlentities() possiamo leggere:

Valori restituiti

Restituisce la stringa codificata.

Se la stringa di input contiene una sequenza di unità codice valido all'interno proposta codifica una stringa vuota verrà restituito, salvo che siano fissati sia la ENT_IGNORE o ENT_SUBSTITUTE bandiere.

Suppongo che i dati di input non siano codificati correttamente come UTF-8 e che la funzione restituisca una stringa vuota. (Supponendo che lo script non si blocca, cioè, codice dopo che parte ancora funziona.)

+0

Penso che tu abbia intenzione di fare qualcosa, fammi provare e codificare prima di aggiungere 'htmlentities' – ToddN

5

non so perché, questo ha funzionato per me (htmlentities deve essere chiamato due volte per me)

$html="<html> <head><head>something like this </html>" 
$entities_correction= htmlentities($html, ENT_COMPAT, 'UTF-8'); 
echo htmlentities($entities_correction, ENT_COMPAT, 'UTF-8'); 

uscita:

&lt;html&gt; &lt;head&gt;&lt;head&gt;something like this &lt;/html&gt;

+1

È strano, perché in pratica devo chiamare htmlentities due volte per farlo codificare. Perché? È strano perché non ho mai avuto questo problema prima e dal nulla non funzionerà da solo. –

3

pensavo di avere lo stesso problema di Pjack (msg di 14 luglio alle 08:54):

$str = "A 'quote' is <b>bold</b>"; 
echo htmlentities($str); 

dà nel Browser (Firefox nel mio caso) l'originale della stringa $ str (senza alcun Traduzione), mentre

echo htmlentities(htmlentities($str)); 

dà:

A 'quote' is &lt;b&gt;bold&lt;/b&gt; 

(io uso PHP/5.4.16 ottenuto da windows-7 XAMPP).

Tuttavia, dopo qualche riflessione in più mi è venuto in mente che il Browser mostra le stringhe & lt; e & gt; come> e <. (vedere il codice sorgente nel browser). La seconda chiamata di htmlentities traduce & in &amp; e solo in seguito il browser mostra ciò che ci si aspettava in primo luogo.

0

Avevo quasi lo stesso problema (in cui in qualche modo mostrava sempre lo stesso testo) e con una combinazione di echo diversi l'ho ottenuto. Sembra che i web browser come Firefox mostrino sempre lo stesso testo. Questo perché quando si echo il testo htmlentities, viene riconvertito nel testo normale durante l'eco. Quando echo uno script con la variabile/testo per essere console.log ged, in realtà echo il testo htmlentities (quasi) correttamente. Invece di sostituire ogni carattere speciale con codifiche html, sostituisce'em con qualche altra codifica che ho già visto prima (non riesco a ricordare il nome). Htmlentities-ing di nuovo, ottengo di nuovo lo stesso testo echeggiò (ricorda che converte tutto), ma echeggiandolo in console.log-versione mi dà il risultato atteso. Ora, ancora una volta, come risultato:
1. Esegui htmlentitiesdue volte!
2. tiratevi (almeno con firefox) eco i htmlentities come normale nella pagina web. Se desideri verificare se il valore è effettivamente corretto, fai clic su uno script che lo registra in console.
Spero che questo potrebbe aiutare altri ragazzi con lo stesso problema,
VicStudio

EDIT: 3. Se si utilizza un formulario $_POST, non dimenticate di aggiungere accept-charset="UTF-8" (o qualche altro set di caratteri) per la Tag <form>.

EVEN ALTRA MODIFICA: eseguire solo 2 volte htmlentities se si desidera che il risultato risulti normale nella pagina. Se desideri inviare direttamente in f.e. un database, fallo solo una volta! -> quello che ho detto prima è parzialmente sbagliato. :(

Problemi correlati