-1

私はこれをやってみました:

REPLACE(string, "<*>", "").

しかし、うまくいかないようです。

4

1 に答える 1

3

REPLACEそのようには機能しません。ワイルドカード マッチングはありません。

これを行う簡単な方法を以下に含めました。ただし、これがうまくいかないケースがたくさんあります - 適切に形成されていない html など。

私がしていることは、テキスト内の < と > を探し、その間のすべてをパイプ (|) に置き換えることです (任意の文字を選択できます。できれば、テキストに存在しないものを選択できます。それが完了すると、すべてのパイプが削除されます。

繰り返しますが、これは迅速で汚い解決策であり、本番環境では安全ではありません...

PROCEDURE cleanHtml:
    DEFINE INPUT  PARAMETER pcString  AS CHARACTER   NO-UNDO.
    DEFINE OUTPUT PARAMETER pcCleaned AS CHARACTER   NO-UNDO.

    DEFINE VARIABLE iHtmlTagBegins AS INTEGER     NO-UNDO.
    DEFINE VARIABLE iHtmlTagEnds   AS INTEGER     NO-UNDO.
    DEFINE VARIABLE lHtmlTagActive AS LOGICAL     NO-UNDO.

    DEFINE VARIABLE i AS INTEGER     NO-UNDO.

    DO i = 1 TO LENGTH(pcString):
        IF lHtmlTagActive = FALSE AND SUBSTRING(pcString, i, 1) = "<" THEN DO:
            iHtmlTagBegins = i.
            lHtmlTagActive = TRUE.
        END.

        IF lHtmlTagActive AND SUBSTRING(pcString, i, 1) = ">" THEN DO:
            iHtmlTagEnds = i.
            lHtmlTagActive = FALSE.

            SUBSTRING(pcString, iHtmlTagBegins, iHtmlTagEnds - iHtmlTagBegins + 1) = FILL("|", iHtmlTagEnds - iHtmlTagBegins).
        END.
    END.

    pcCleaned = REPLACE(pcString, "|", "").

END PROCEDURE.

DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

RUN cleanHtml("This is a <b>text</b> with a <i>little</i> bit of <strong>html</strong> in it!", OUTPUT c).

MESSAGE c VIEW-AS ALERT-BOX.
于 2015-01-26T14:02:52.537 に答える