2011-07-06 38 views
7

Chúng tôi đang lưu trữ các khối nội dung HTML trong MySQL (nó được định dạng văn bản được tạo trong CKeditor. Ckeidor thêm các kiểu CSS nội tuyến để định dạng văn bản). Chúng tôi đang lưu trữ cơ sở dữ liệu trong một cột có tên "page_content"Bỏ qua các ký tự HTML khi tìm kiếm nội dung được lưu trữ HTML PHP/MySQL?

Chúng tôi muốn một tính năng tìm kiếm cho phép người dùng tìm kiếm văn bản (chỉ). Tuy nhiên, chúng tôi không muốn tìm kiếm trả lại các ký tự HTML là những gì đang diễn ra ngay bây giờ. Ví dụ: nếu chúng tôi tìm kiếm "phông chữ", chúng tôi không muốn kết quả tìm kiếm trả về các trang có kiểu HTML <font>

Có cách nào bỏ qua các ký tự HTML/CSS khi tìm kiếm nội dung được lưu trữ HTML từ MySQL không?

Trả lời

2

Tôi đoán bạn muốn thực hiện tìm kiếm trên cơ sở dữ liệu? (trong trường hợp đó, tước các thẻ HTML có nghĩa là bạn sẽ phải lưu trữ nội dung hai lần).

Hãy thử sử dụng chức năng tìm kiếm văn bản đầy đủ của MYSQL, trong chế độ ngôn ngữ tự nhiên.

http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html

+0

Giải pháp đơn giản luôn là giải pháp tốt nhất. Cảm ơn. – HoldOffHunger

4

Bạn đã cân nhắc thiết lập bảng riêng cho các tìm kiếm này chưa? MySQL's full text search chỉ hoạt động với các bảng MyISAM vì vậy bạn có thể không muốn kết hợp tìm kiếm văn bản đầy đủ với dữ liệu quan trọng (trừ khi, tất nhiên, bạn có một số sự khác biệt lạ đối với khóa ngoài và tính toàn vẹn tham chiếu).

Phương pháp tôi đã sử dụng trong quá khứ là cơ bản này:

  • Thiết lập một bảng riêng biệt với một đơn giản (id, SEARCH_TEXT) cấu trúc.
    • id khớp với số id của nội dung bạn đang tìm kiếm.
    • search_text là mọi thứ (văn bản nội dung, tiêu đề, tên tác giả, ...) mà bạn muốn tìm kiếm được nghiền thành một khối văn bản.
  • Thêm full text indexing trên bảng tìm kiếm.
  • Cập nhật quá trình cập nhật cơ sở dữ liệu của bạn để xây dựng chuỗi search_text thích hợp dưới dạng văn bản thuần túy; đây là nơi bạn sẽ loại bỏ HTML và có thể áp dụng một số ánh xạ khác (chẳng hạn như mở rộng những thứ như "A +" cho nội dung tìm kiếm văn bản đầy đủ sẽ tìm thấy).
  • Khi tìm kiếm, bạn áp dụng cùng một ánh xạ khi bạn áp dụng cho dữ liệu có thể tìm kiếm và sau đó đi tìm trong bảng tìm kiếm của bạn cho phù hợp.

Điều này giải quyết vấn đề HTML của bạn, cho phép bạn tìm kiếm nội dung HTML dễ dàng hơn và cho phép bạn điều chỉnh kết quả tìm kiếm theo trọng số khác nhau của văn bản tìm kiếm thông qua sự lặp lại (ví dụ: nếu bạn muốn thẻ quan trọng hơn so với văn bản nội dung, chỉ cần thêm các thẻ hai hoặc ba lần khi xây dựng search_text).

Bạn sẽ phải xử lý văn bản của mình để xóa hoặc bỏ qua HTML. Cách tiếp cận này cho phép bạn làm điều đó một lần thay vì thực hiện nó trên mọi tìm kiếm.

+0

Điều duy nhất mà giải pháp này thiếu là có thể tìm kiếm một trường cụ thể, như là kết quả của việc nối tất cả văn bản cho một thực thể duy nhất với nhau. Ví dụ: bạn không thể tìm thấy tất cả các thực thể có 'foo' trong tiêu đề, vì các thực thể có 'foo' trong nội dung sẽ khớp với nhau. –

+0

@Chris: Nhưng bạn có thể làm được điều đó với các cột phụ nếu cần. –

+0

@Chris, chúng tôi không thể xóa HTML. Nó được định dạng nội dung bằng cách sử dụng Ckeditor (phong cách CSS nghiêng) – user635800

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