Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencari Lajur MySQL yang Mengandungi Tag HTML dengan Tepat?

Bagaimana untuk Mencari Lajur MySQL yang Mengandungi Tag HTML dengan Tepat?

DDD
DDDasal
2024-12-14 10:05:10169semak imbas

How to Accurately Search MySQL Columns Containing HTML Tags?

Alih Keluar Teg HTML daripada Rekod

Anda mungkin mengalami situasi di mana anda perlu mencari kata kunci tertentu dalam lajur yang mengandungi tag HTML. Walau bagaimanapun, anda mungkin mendapati bahawa pertanyaan anda mengembalikan hasil yang salah disebabkan kehadiran teg ini. Mari kita terokai cara mengubah suai pertanyaan MySQL anda untuk menapis rekod dengan tepat berdasarkan kandungannya sambil mengecualikan teg HTML.

Dalam contoh yang disediakan, pertanyaan SELECT * dari jadual WHERE colmn_name LIKE '%mytext%' akan mendapatkan keempat-empat baris, walaupun hanya baris 3 mengandungi kata kunci "teks saya" dalam kandungannya. Untuk mengatasi cabaran ini, pertimbangkan penyelesaian berikut yang dicadangkan oleh ahli forum MySQL:

SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty varchar(4000) )
RETURNS varchar(4000)
DETERMINISTIC
BEGIN
  DECLARE iStart, iEnd, iLength int;
  WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
    BEGIN
      SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
      SET iLength = ( iEnd - iStart) + 1;
      IF iLength > 0 THEN
        BEGIN
          SET Dirty = Insert( Dirty, iStart, iLength, '');
        END;
      END IF;
    END;
  END WHILE;
  RETURN Dirty;
END;
|
DELIMITER ;
SELECT fnStripTags('this <html>is <b>a test</b>, nothing more</html>');

Penyelesaian ini melibatkan penciptaan fungsi takrif pengguna (UDF) bernama fnStripTags yang menerima rentetan kotor yang mengandungi tag HTML. Fungsi ini berulang melalui rentetan, mencari teg pembukaan (<) dan penutup (>). Ia mengira panjang teg dan mengeluarkannya daripada rentetan untuk menghasilkan rentetan bersih tanpa elemen HTML.

Untuk menggunakan UDF ini, anda boleh memasukkannya ke dalam pertanyaan asal anda seperti berikut:

SELECT * FROM table WHERE fnStripTags(column_name) LIKE '%mytext%';

Dengan menggunakan UDF ini, pertanyaan anda akan mengecualikan teg HTML daripada carian, memastikan anda mendapatkan hanya baris di mana kata kunci "teks saya" muncul dalam kandungan sebenar. Pendekatan ini membolehkan anda melakukan penapisan data yang lebih tepat dan mengelakkan sebarang gangguan daripada penanda HTML.

Atas ialah kandungan terperinci Bagaimana untuk Mencari Lajur MySQL yang Mengandungi Tag HTML dengan Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn