我想弄清楚将新行字符替换为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;
答案 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;