Wanted to post a solution to the above question, asked elsewhere, but don't have the reputation points, so have raised this and answered at the same time, as others may find this solution useful .. :
CREATE FUNCTION [dbo].[u_FN_CleanString](@string VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
;
WITH DummyTable(DummyColumn) AS (SELECT 1
FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1)) DummyTable(DummyColumn))
-- ASCII 0-31 (join 5 times: 2->4->8->16->32 rows)
, Unprintables(Chrctr) AS (SELECT TOP(32) CHAR(ROW_NUMBER() OVER (ORDER BY (SELECT NULL))-1)
FROM DummyTable a,DummyTable b,DummyTable c,DummyTable d,DummyTable e
UNION
-- ASCII 128-255 (join 7 times: 2->4->8->16->32->64->128 rows)
SELECT TOP(128) CHAR(ROW_NUMBER() OVER (ORDER BY (SELECT NULL))+127)
FROM DummyTable a,DummyTable b,DummyTable c,DummyTable d,DummyTable e,DummyTable f,DummyTable g)
-- Remove extended ASCII characters
SELECT @string=REPLACE(@string,Chrctr,'')
FROM Unprintables
-- Do not replace Carriage Returns or Line Feeds
WHERE Chrctr NOT IN (CHAR(10),CHAR(13))
RETURN RTRIM(@string)
END