5

Tôi đang phát triển CMS cho khách hàng và anh ấy cần chỉnh sửa nội dung và sử dụng các ký tự đặc biệt như ç®. Tuy nhiên, tôi không muốn anh ta phải nhập các mã ký tự như ®. Có ai biết một cách tốt để tự động chuyển đổi những ký tự bằng cách sử dụng PHP?Chuyển đổi các ký tự đặc biệt thành mã ký tự HTML

+4

Err. Chỉ cần đảm bảo mã hóa ký tự của bạn là nhất quán (nghĩa là chỉ sử dụng UTF-8 trong suốt) và bạn không cần chuyển đổi các ký tự đó để chúng hiển thị hoàn hảo. – Quentin

Trả lời

14

Bạn có thể sử dụng htmlentities() để làm điều đó.

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

Để bật các đối tượng trở lại văn bản có thể đọc được, sử dụng html_entity_decode():

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

Nếu bạn không sử dụng unicode, bỏ qua tên charset hoặc cung cấp cho các charset đúng.

+1

+1 để chỉ định mã hóa. –

+0

Câu trả lời tuyệt vời giải quyết được vấn đề tôi đã gặp trong vài năm. Đáng chú ý là một số câu trả lời khác đề cập đến việc sao chép hoặc mã hóa cứng phiên bản ALT KeyCode của biểu tượng sẽ không hoạt động khi bạn di chuyển mã của mình từ hệ điều hành sang hệ điều hành. –

2

Sử dụng unicode, và chỉ cho ông làm thế nào để sao chép & dán từ đồ vật :-)

+4

-1. Câu trả lời này là gì? –

+3

@Alin Không phải * đó là một câu trả lời tồi, tôi muốn nói - nếu khách hàng đã sử dụng các ký tự như ç và ®, thì sử dụng UTF-8, cho biết, đầu vào, lưu trữ và đầu ra của CMS sẽ bật bạn phải loại bỏ sự cần thiết của các thực thể HTML. Cũng giống như nó đang làm trên trang web này, ví dụ, nơi tôi vừa gõ "®", gửi nó đến trang web, và trang web hiển thị nó dưới dạng "®" - tìm trong mã nguồn của trang này, và bạn đã thắng không thấy thực thể HTML ở đó, chỉ là ký tự thực, thực. –

+0

@MattGibson Một vấn đề là nếu bạn sử dụng kiểm soát nguồn và bạn di chuyển mã của bạn qua lại giữa các hệ điều hành và hệ điều hành windows unix. Tôi đã học được cách khó rằng mã khóa ALT không hoạt động theo cách bạn muốn chúng trên các hệ điều hành. –

3

Các dễ nhất là nên sử dụng UTF-8 ngay từ khởi đầu.
Nhưng bạn cũng có thể tự động chuyển đổi nhân vật với DOM:

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

đầu ra

© oui içi » 
0

Hãy xem hàm htmlentities. Điều này có một chuỗi và chuyển đổi các ký tự thành phần thành các thực thể HTML của chúng. Bạn có thể chỉ định mã hóa của chuỗi để phù hợp với đầu vào của người dùng.

+0

Cảm ơn bạn! Nó hoạt động :) –

Các vấn đề liên quan