module escaper character(*), parameter::need_escape = " $&`:<>[]{}+#%@/;=?\^|~',"//'"' contains subroutine escape_string(text) implicit none character(*), intent(inout)::text integer::i character(3)::replace_text integer::replace_code i=1 do while(i < len_trim(text)) if(index(need_escape, text(i:i)) > 0) then replace_code = iachar(text(i:i)) write(replace_text, '(A1,Z2)') "%", replace_code if(i == 1) then text = replace_text//text(2:len_trim(text)) else if(i == len_trim(text)) then text = text(1:(i-1))//replace_text else text = text(1:(i-1))//replace_text//text((i+1):len_trim(text)) end if i = i + 3 else i = i + 1 end if end do end subroutine escape_string end module escaper