2013-04-04 11 views
6

Natürlich wurde dies schon einmal gefragt und haben nach Lösungen gesucht, die alle bisher nicht funktioniert haben. Ich möchte das TM-Symbol ändern und das Und-Zeichen in ihre HTML-equivelents unter Verwendung htmlentities oder htmlspecialchars:PHP htmlentities funktioniert nicht einmal mit Parametern

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

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

Diese Displays:

ORGINIAL: Kold Locker™ & other stuff 
HTML: 

Ich habe auch versucht es mit htmlspecialchars und der zweite Parameter geändert mit dem gleichen Ergebnis.

Was fehlt mir, dass andere behaupteten, in anderen Lösungen gearbeitet zu haben?

UPDATE: Ich habe gerade versucht utf8_encode($TEST) Anzeige und es angezeigt HTML: Kold Locker™ & other stuff

+0

Set display_errors auf '1' und setzen error_reporting auf 'E_ALL'. Sie sind wahrscheinlich eine Fehlermeldung bekommen. – Halcyon

+0

welche Version von PHP? – Prisoner

+0

ich Fehler überprüft haben mit keiner Berichterstattung aufgeführt – ToddN

Antwort

2

Ihr Code funktioniert für mich: -?

Im manual page for htmlentities() können wir lesen:

Rückgabewerte

die codierte Zeichenfolge zurück.

Wenn die Eingabezeichenfolge enthält eine ungültige Codeeinheit Sequenz innerhalb der codierend eine leere Zeichenkette angegeben wird zurückgegeben, wenn nicht entweder das ENT_IGNORE oder ENT_SUBSTITUTE Flags gesetzt ist.

Meine Vermutung ist, dass die Eingabedaten nicht ordnungsgemäß als UTF-8 codiert sind und die Funktion eine leere Zeichenfolge zurückgibt. (Unter der Annahme, dass das Skript nicht abstürzt, dh Code nach, dass ein Teil noch läuft.)

+0

Ich denke, Sie sind auf etwas, lassen Sie mich versuchen und verschlüsseln vor dem Hinzufügen 'htmlentities' – ToddN

5

Ich weiß nicht, warum, das ist für mich gearbeitet (htmlentities muss zweimal für mich genannt)

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

output:

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

+1

Es ist seltsam, weil ich im Wesentlichen htmlentities zweimal aufrufen müssen, um es zu kodieren. Warum? Es ist komisch, weil ich dieses Problem nie zuvor hatte und es aus dem Nichts nicht alleine funktionieren wird. –

3

Ich dachte, ich hatte das gleiche Problem wie Pjack (msg von 14. Juli um 8:54):

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

gibt im Browser (Firefox in meinem Fall) die ursprüngliche Zeichenfolge $ str (ohne jede Übersetzung), während

echo htmlentities(htmlentities($str)); 

gibt:

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

(ich von windows-7 XAMPP) verwenden PHP/5.4.16 erhalten.

Nach etwas mehr Gedanken fiel mir jedoch ein, dass der Browser die Zeichenfolgen & lt zeigt; und & gt; als> und <. (Siehe den Quellcode im Browser). Zweiter Aufruf von htmlentities übersetzt & in &amp; und nur dann zeigt der Browser an erster Stelle, was Sie erwartet haben.

0

Ich hatte fast das gleiche Problem (in dem es irgendwie den gleichen Text jedes Mal zeigte) und mit einer Kombination von verschiedenen Echos habe ich es bekommen. Es scheint, dass Webbrowser wie Firefox immer den gleichen Text zeigen. Das liegt daran, dass wenn Sie den HTML-Text echo haben, wird er während des Echos wieder in normalen Text konvertiert. Wenn ich ein Skript mit der Variable/text auf console.log gedede, echo es tatsächlich den Text htmlentities (fast) korrekt. Anstatt jedes spezielle Zeichen durch HTML-Kodierungen zu ersetzen, ersetzt es sie mit einigen anderen Kodierungen, die ich bereits gesehen habe (ich kann mich nicht an den Namen erinnern). Httmlentities-es wieder, ich bekomme den gleichen Text wieder Echo (erinnern Sie sich, es konvertiert alles), aber das Echo in der console.log-Version gibt mir das erwartete Ergebnis. Jetzt wieder als Ergebnis:
1. Führen Sie htmlentitieszweimal aus!
2. dont (zumindest mit den folgenden) Echo die htmlentities normal in die Webseite. Wenn Sie prüfen möchten, ob der Wert tatsächlich korrekt ist, wiederholen Sie ein Skript, das es in der Konsole protokolliert.
Ich hoffe, die andere Leuten mit dem gleichen Problem helfen könnte,
VicStudio

EDIT: 3. Wenn Sie ein $_POST formular verwenden, vergessen Sie nicht accept-charset="UTF-8" (oder eine andere charset) hinzufügen, um die <form> tag.

NOCH MEHR BEARBEITEN: Tun Sie nur 2 mal htmlentities, wenn Sie Ihr Ergebnis normal in die Seite zurückgeben möchten. Wenn Sie direkt f. eine Datenbank, mach es nur einmal! -> Was ich vorher gesagt habe, ist teilweise falsch. :(