2012-08-15 15 views
8

Mam następujący kod:Alternatywa mb_convert_encoding z HTML-PODMIOTAMI charset

mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8'); 

muszę mieć alternatywny kod, który robi dokładnie to samo, ale nie używać żadnych mb_ * funkcje (rozszerzenie mb nie jest dostępne w niektórych środowiskach).

Myślałem, że

utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8')); 

powinni robić dokładnie to samo, ale niestety tak nie jest.

Odpowiedz

20

Grałem trochę i uważam to za bardzo interesujące. Wygląda na to, że druga część uruchamia również "htmlspecialchars". Musi to być jakiś błąd w mb_convert_encoding, ponieważ htmlentities nie działa poprawnie.

Jeśli uruchomisz htmlspecialchars_decode nad wynikiem, otrzymasz dokładnie to samo, co w przypadku użycia mb_convert_encoding.

Kod:

$string = 'Test:!"$%&/()=ÖÄÜöäü<<'; 
echo mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8')."\n\n"; 
echo htmlspecialchars_decode(utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8', false))); 

Oto demo powyższym kodzie: http://sandbox.onlinephpfunctions.com/code/715acade3b8337d9c9e48e58deee2a237015c259

a tu demo bez htmlspecialchars_decode, aby pokazać swój problem: http://sandbox.onlinephpfunctions.com/code/5c4a32bf99aa8fd6246c4a77132a023d32945363

+0

Absolutnie świetny - wielkie dzięki los! – Simon

+0

Dzięki, uratowałeś mój dzień! Działa to dobrze z DOMDocument :) –