将新行转换为<br/>

时间:2016-01-07 07:32:28

标签: postgresql

我想弄清楚将新行字符替换为br的好方法,我能使其工作的唯一方法是使用“3x-replace”解决方案,这是有效的(我猜它投入功能并不是那么冗长),但我想知道是否有更优雅的解决方案。

感谢您的任何反馈。

--
-- Works, but seems a little heavy with 3 nested replace commands
--
CREATE OR REPLACE FUNCTION test_nl2br(text_in text) RETURNS text AS
$$
    SELECT replace(
        replace( 
            replace(text_in, E'\r\n', '<br />'), E'\n', '<br />'
        ), E'\r', '<br />'
    );
$$
LANGUAGE SQL;

--
-- Test with a few values
--
WITH example_set AS (
    SELECT * FROM (
        VALUES
            (E'a\nb'),
            (E'a\r\nb'),
            (E'a\rb'),
            (E'a\nb\rc\r\nd')
        ) AS x (test)
)
SELECT test_nl2br(test::text) AS result FROM example_set;

1 个答案:

答案 0 :(得分:3)

您可以使用regexp_replace功能

CREATE OR REPLACE FUNCTION test_nl2br(text_in text)
RETURNS text AS $$                 
   SELECT regexp_replace($1, E'\r\n|\n|\r', '<br />', 'g');
$$ LANGUAGE SQL;