투케이2K

65. (swift/xcode) [유틸 파일] html 태그 제거 및 이중 공백 제거 문자열 데이터 반환 본문

Swift

65. (swift/xcode) [유틸 파일] html 태그 제거 및 이중 공백 제거 문자열 데이터 반환

투케이2K 2022. 3. 31. 16:50
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

    // MARK: - [html 태그 제거 및 리턴 문자열 반환 메소드]
    func htmlTagRemoveString(_data:String) -> String {
        
        /*
        // -----------------------------------------
        [htmlTagRemoveString 메소드 설명]
        // -----------------------------------------
        1. html 태그 제거 및 리턴 문자열 반환 메소드
        // -----------------------------------------
        2. 호출 방법 :
         let data = "<p>test url</p><p><a href=&quot;https://www.naver.com&quot;>https://www.naver.com</a></p><p>&amp;nbsp;</p><p>입니다</p><p>&amp;nbsp;</p>";
         
         C_Util().htmlTagRemoveString(_data: data)
        // -----------------------------------------
        3. 리턴 반환 : html 태그 제거 문자열 데이터
        // -----------------------------------------
        */
        
        // [초기 리턴 데이터 변수 선언 실시]
        var returnData = ""
        
        // [인풋 데이터 널 체크 수행 실시]
        if _data != nil
            && _data.count>0
            && _data != ""
            && _data.trimmingCharacters(in: .whitespacesAndNewlines) != ""
            && _data.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
            && _data.isEmpty == false {
            
            guard let encodedData = _data.data(using: .utf8)
            else {
                print("")
                print("====================================")
                print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 에러]")
                print("-------------------------------")
                print("error [1] :: data 변환 에러")
                print("====================================")
                print("")
                return returnData
            }
            
            // [html 태그를 제거 하기 위해 옵션 설정 실시]
            let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
                .documentType: NSAttributedString.DocumentType.html,
                .characterEncoding: String.Encoding.utf8.rawValue
            ]
            
            do {
                // [html 태그 1차 제거 실시]
                let attributed = try NSAttributedString(data: encodedData,
                                                        options: options,
                                                        documentAttributes: nil)
                returnData = attributed.string
                
                
                // [html 태그 2차 제거 실시]
                var checkCount = 0;
                for i in stride(from: 0, through: returnData.count-1, by: 1) {
                    let charIndex = returnData.index(returnData.startIndex, offsetBy: i)
                    
                    if returnData[charIndex] == "&" {
                        checkCount = checkCount + 1 // [카운트 증가 실시]
                    }
                }
                if checkCount > 0 {
                    for k in stride(from: 0, through: checkCount-1, by: 1) {
                        guard let encodedData = returnData.data(using: .utf8)
                        else {
                            print("")
                            print("====================================")
                            print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 에러]")
                            print("-------------------------------")
                            print("error [2] :: data 변환 에러")
                            print("====================================")
                            print("")
                            return returnData
                        }
                        do {
                            let attributed = try NSAttributedString(data: encodedData,
                                                                    options: options,
                                                                    documentAttributes: nil)
                            returnData = attributed.string
                        }
                        catch {
                            print("")
                            print("====================================")
                            print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 에러]")
                            print("-------------------------------")
                            print("catch [2] :: \(error.localizedDescription)")
                            print("====================================")
                            print("")
                        }
                    }
                }
                
                
                // [문자열 연속 공백 제거 실시]
                var str_array = Array(returnData)
                var remove_array : Array<Int> = []
                
                var nullCheck = 0
                for j in stride(from: 0, through: str_array.count-1, by: 1) {
                    if j != str_array.count-1 {
                        var first = str_array[j].description.replacingOccurrences(of: " ", with: "")
                        first = first.trimmingCharacters(in: .whitespacesAndNewlines)
                        
                        var second = str_array[j+1].description.replacingOccurrences(of: " ", with: "")
                        second = second.trimmingCharacters(in: .whitespacesAndNewlines)
                        
                        if first.count == 0 && second.count == 0 {
                            remove_array.append(j)
                        }
                    }
                }
                if remove_array != nil && remove_array.count>0 && remove_array.isEmpty == false {
                    for k in stride(from: 0, through: remove_array.count-1, by: 1){
                        str_array.remove(at: remove_array[k]-k) // [한개씩 배열데이터를 삭제할 때 마다 인덱스 값을 맞추기 위함]
                    }
                }
                returnData = ""
                for v in stride(from: 0, through: str_array.count-1, by: 1){
                    returnData = returnData + String(describing: str_array[v])
                }
                
                
                // [문자열 양쪽 끝 공백 제거 실시]
                returnData = returnData.trimmingCharacters(in: .whitespacesAndNewlines)
            }
            catch {
                print("")
                print("====================================")
                print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 에러]")
                print("-------------------------------")
                print("catch [1] :: \(error.localizedDescription)")
                print("====================================")
                print("")
            }
        }
        
        // [로그 출력 실시]
        print("")
        print("====================================")
        print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 실시]")
        print("-------------------------------")
        print("input :: \(_data)")
        print("-------------------------------")
        print("return :: \(returnData)")
        print("====================================")
        print("")
        
        // [리턴 데이터 반환 실시]
        return returnData
    }
 

[결과 출력]


반응형
Comments