2013-04-04 9 views
6

Oczywiście wcześniej zapytano o to i szukałem rozwiązań, które dotychczas nie działały. Chcę zmienić się symbol TM i ampersanda do swoich equivelents html za pomocą htmlentities lub htmlspecialchars:Ulepszenia PHP nie działają nawet z parametrami

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

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

Wyświetla:

ORGINIAL: Kold Locker™ & other stuff 
HTML: 

Próbowałem również ją htmlspecialchars a drugi parametr zmieniony z tym samym wynikiem.

Czego brakuje mi, aby inni twierdzili, że pracował w innych rozwiązaniach?

UPDATE: Próbowałem tylko wyświetlanie utf8_encode($TEST) i wyświetlane HTML: Kold Locker™ & other stuff

+0

Set display_errors do '1 'i ustawione na' E_ALL' error_reporting. Najprawdopodobniej otrzymuję komunikat o błędzie. – Halcyon

+0

jaka wersja php? – Prisoner

+0

Sprawdziłem raportowania żaden z wymienionych – ToddN

Odpowiedz

2

Twój kod działa dla mnie: -?

W manual page for htmlentities() możemy przeczytać:

Zwracane wartości

Zwraca zakodowany ciąg.

Jeśli ciąg wejściowy zawiera niepoprawną sekwencję jednostek kodu w ciągu podane kodowanie pustego łańcucha zostanie zwrócony, chyba że ustawiono flagi ENT_IGNORE lub ENT_SUBSTITUTE .

Zgaduję, że dane wejściowe nie są poprawnie zakodowane jako UTF-8, a funkcja zwraca pusty ciąg. (Zakładając, że skrypt nie jest upaść, czyli kod po tym część nadal działa).

+0

Myślę, że jesteś na czymś, pozwól mi spróbować zakodować przed dodaniem 'htmlentities' – ToddN

5

nie wiem dlaczego, to pracował dla mnie (htmlentities musi być wywołana dwukrotnie dla mnie)

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

wyjściowa:

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

+1

To dziwne, ponieważ muszę zasadniczo wywołać htmlentities dwa razy, aby go zakodować. Czemu? To dziwne, ponieważ nigdy wcześniej nie miałem tego problemu i znikąd nie będzie działało samo. –

3

myślałem, miałem ten sam problem jak Pjack (MSG z lip 14 w 8:54):

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

daje w przeglądarce (Firefox w moim przypadku) pierwotny łańcuch $ str (bez dowolny tłumaczenie), natomiast

echo htmlentities(htmlentities($str)); 

daje:

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

(używam PHP/5.4.16 uzyskane z systemem Windows 7 XAMPP).

Po kilku kolejnych myślach przyszło mi do głowy, że przeglądarka pokazuje ciągi znaków: & lt; i & gt; jako> i <. (Zobacz kod źródłowy w przeglądarce). Drugie wywołanie htmlentities tłumaczy & na &amp; i dopiero wtedy przeglądarka pokazuje, czego się spodziewałeś.

0

Miałem prawie ten sam problem (w którym jakoś pokazywał ten sam tekst za każdym razem) i z kombinacją różnych ech, mam to. Wygląda na to, że przeglądarki internetowe, takie jak Firefox, wyświetlają ten sam tekst za każdym razem. Dzieje się tak dlatego, że po teście htmlentities jest on przekształcany z powrotem w zwykły tekst podczas echa. Kiedy wywołuję echo skryptu ze zmienną/tekstem, który ma być console.log, to faktycznie jest to tekst htmlentities (prawie) poprawnie. Zamiast zamieniać każdy znak specjalny na kodowanie html, zastępuje on'em innym kodowaniem, które już wcześniej widziałem (nie pamiętam nazwy). Po ponownym uruchomieniu, otrzymuję ponownie ten sam tekst (pamiętaj, że konwertuje wszystko), ale echo w konsoli. Log-wersja daje mi oczekiwany rezultat. Ponownie, w rezultacie:
1. Wykonaj htmlentitiesdwa razy!
2. Do not (przynajmniej firefox) echa z htmlentities jako normalne język stronie. Jeśli chciałbyś sprawdzić, czy wartość jest rzeczywiście poprawna, echo skrypt, który loguje go do konsoli.
Mam nadzieję, że to może pomóc chłopakom z tym samym problemem,
VicStudio

EDIT: 3. Jeśli używasz $_POST z formularza, Nie zapomnij dodać accept-charset="UTF-8" (lub jakiś inny zestaw znaków) do <form> tag.

JESZCZE WIĘCEJ EDYCJI: Wykonuj tylko 2 razy htmlentities, jeśli chcesz powtórzyć swój wynik normalny na stronie. Jeśli chcesz bezpośrednio wysłać f.e. baza danych, rób to tylko raz! -> to, co powiedziałem wcześniej, jest częściowo błędne. :(

Powiązane problemy