2011-07-22 12 views
15

Moje dane zawierają wiele elementów HTML (• ... itd.), W tym '. Chcę go przekonwertować na jego odpowiednik znaków.Konwertuj na apostrof w PHP

Założono, że htmlspecialchars_decode() będzie działać, ale - bez powodzenia. Myśli?

Próbowałem to:

echo htmlspecialchars_decode('They're here.'); 

ale zwraca: They're here.

Edit:

Próbowałem również html_entity_decode(), ale nie wydaje się działać:

echo html_entity_decode('They're here.') 

a Iso zwraca: They're here.

Odpowiedz

29

Ponieważ ' nie jest częścią HTML 4.01, domyślnie nie jest konwertowany na '.

W języku PHP 5.4.0, extra flags were introduced do obsługi różnych języków, z których każdy zawiera ' jako obiekt.

Oznacza to, że można zrobić coś takiego:

echo html_entity_decode('They're here.', ENT_QUOTES | ENT_HTML5); 

Będziesz potrzebować zarówno ENT_QUOTES (konwersji pojedynczych i podwójnych cudzysłowów) i ENT_HTML5 (lub dowolną flagę języku innym niż ENT_HTML401, więc wybrać najbardziej odpowiedni dla danego sytuacja).

Przed PHP 5.4.0, trzeba użyć str_replace:

echo str_replace(''', "'", 'They're here.'); 
+0

Zaktualizowałem odpowiedź dla PHP 5.4.0 (rekwizyty do eric.itzhak dla aktualizacji). – cmbuckley

1

To, czego naprawdę szukasz, to html_entity_decode().

html_entity_decode() tłumaczy wszystkie jednostki na znaki, a htmlspecialchars_decode() odwraca tylko kodowanie htmlspecialchars().

EDIT: Patrząc na przykłady na stronie I związane, zrobiłem trochę więcej dochodzenia i następujący wydaje się nie działać:

[[email protected] ~]$ php 
<?php 
$tmp = array_flip(get_html_translation_table(HTML_ENTITIES)); 
var_dump($tmp['&apos;']); 
PHP Notice: Undefined index: &apos; in - on line 3 
NULL 

To dlaczego to nie działa. Dlaczego nie znajduje się w tabeli odnośników to zupełnie inne pytanie, na które niestety nie mogę odpowiedzieć.

+0

bez powodzenia. html_entity_decode wciąż zwraca ' – Dave

+0

@Dave: Niefortunnie, być może będziesz musiał przetasować własne ... Wygląda na to, że PHP nie obsługuje cofania ''' z jakiegoś powodu. Zobacz moją edycję po więcej. –

+0

Wygląda na to, że ''' nie jest częścią HTML 4.01. – cmbuckley

-4

Czy próbowałeś już korzystać z echo htmlspecialchars('They&apos;re here.')?

Myślę, że tego właśnie szukasz.

+2

Uważam, że jest to przeciwieństwo tego, czego chcę. – Dave

2

To powinno działać:

$value = "They&apos;re here."; 
html_entity_decode(str_replace("&apos;","'",$value)); 
+0

Doceniam twój czas, ale to jest to samo, co już zatwierdzona odpowiedź. – Dave

3

Istnieje „prawo” sposób, bez użycia str_replace, @cbuckley miał rację, że to dlatego domyślny dla html_entity_decode to HTML 4.01, ale możesz ustawić parametr HTML 5, który go zdekoduje.

Używaj go tak:

html_entity_decode($str,ENT_QUOTES | ENT_HTML5)