5

Pracuję nad systemem CMS dla klienta, który musi edytować rzeczy i używać znaków specjalnych, takich jak ç i ®. Jednak nie chcę, aby wprowadzał kody znaków, takie jak ®. Czy ktokolwiek wie, w jaki sposób można automatycznie przekonwertować te znaki za pomocą PHP?Konwertuj znaki specjalne na kody znaków HTML

+4

Błąd. Po prostu upewnij się, że kodowanie znaków jest spójne (tzn. Po prostu użyj UTF-8 w całości) i nie musisz konwertować tych znaków, aby były idealnie wyświetlane. – Quentin

Odpowiedz

14

Można używać htmlentities(), aby to zrobić.

php -r 'echo htmlentities("®ç", ENT_COMPAT, "UTF-8"), "\n";' 
®ç 

Aby włączyć podmioty z powrotem do czytelnego tekstu, należy html_entity_decode():

php -r 'echo html_entity_decode("®ç", ENT_COMPAT, "UTF-8"), "\n";' 
®ç 

Jeśli nie używasz Unicode, należy pominąć nazwę charset lub podać poprawną charset.

+1

+1 dla określenia kodowania. –

+0

Fantastyczna odpowiedź, która rozwiązuje problem, z którym zmaga się przez kilka lat. Warto zauważyć, że niektóre z innych odpowiedzi, które wspominają o wklejaniu kopii lub twardym kodowaniu wersji symbolu ALT KeyCode, nie będą działać, gdy przeniesiesz swój kod z systemu operacyjnego do systemu operacyjnego. –

2

używać Unicode i pokazać mu, jak skopiować & pastę z postaci mapie :-)

+4

-1. Jaka jest odpowiedź? –

+3

@Alin To nie jest * ta * zła odpowiedź, powiedziałbym - jeśli klient już używa znaków takich jak ç i ®, to za pomocą UTF-8 powiedzmy, że wejście, przechowywanie i wyjście CMS pozwoli musisz pozbyć się potrzebnych elementów HTML. Tak jak dzieje się to na tej stronie, na przykład w miejscu, w którym po prostu wpisałem "®", wysłałem ją na stronę, a strona wyświetlała ją jako "®" - spójrz na kod źródłowy tej strony i wygrałeś Nie widzisz tam encji HTML, tylko rzeczywistą, prawdziwą postać. –

+0

@MattGibson Problem polega na tym, że używasz kontroli źródła i przenosisz kod tam iz powrotem pomiędzy systemami operacyjnymi opartymi na systemach uniksowych i systemami operacyjnymi Windows. Nauczyłem się na własnej skórze, że kody klawiszy ALT nie działają tak, jak chcesz, w systemach operacyjnych. –

3

Najłatwiej byłoby wykorzystanie UTF-8 od samego początek.
Ale można też automatycznie konwertować znaki z DOM:

$dom = new DOMDocument; 
$dom->appendChild(new DOMText('© oui içi » ')); 
echo $dom->saveHtml(); 

wyjścia

© oui içi » 
0

Proszę spojrzeć na funkcję htmlentities. Zajmuje to ciąg znaków i konwertuje znaki elementów na ich encje HTML. Możesz określić kodowanie ciągu, aby było spójne z wprowadzeniem użytkownika.

+0

Dziękujemy! To działa :) –