レコードから HTML タグを削除する
次の内容が含まれる列内で特定のキーワードを検索する必要がある状況が発生した可能性があります。 HTMLタグ。ただし、これらのタグの存在により、クエリが間違った結果を返す場合があります。 MySQL クエリを変更して、HTML タグを除外しながらコンテンツに基づいてレコードを正確にフィルタリングする方法を見てみましょう。
提供された例では、クエリ SELECT * from table WHEREcolmn_name LIKE '%mytext%' は 4 つすべてを取得します。ただし、内容にキーワード「mytext」が含まれるのは行 3 のみです。この課題を克服するには、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>');
この解決策には、HTML タグを含むダーティ文字列を受け入れる fnStripTags という名前のユーザー定義関数 (UDF) を作成することが含まれます。この関数は文字列を反復処理して、開始タグ (<) と終了タグ (>) を見つけます。タグの長さを計算し、文字列からタグを削除して、HTML 要素のないクリーンな文字列を生成します。
この UDF を使用するには、次のように元のクエリに組み込むことができます。
SELECT * FROM table WHERE fnStripTags(column_name) LIKE '%mytext%';
この UDF を利用すると、クエリで HTML タグが検索から除外され、実際のコンテンツにキーワード「mytext」が出現する行のみが確実に取得されます。このアプローチにより、より正確なデータ フィルタリングを実行し、HTML マークアップによる干渉を回避できます。
以上がHTML タグを含む MySQL 列を正確に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。