; Преобразуем данные в правильный текст без < и тому подобных
#include <Array.au3>
$filehtm = @ScriptDir & '\index.htm'
If Not FileExists($filehtm) Then
MsgBox(0, 'Сообщение', 'Требуется файл htm, указываем в скрипте')
Exit
EndIf
$text = FileRead($filehtm)
$log = ''
; Замена некоторых часто испольхуемых спецсимволов, а их на самом деле больше
$text = StringRegExpReplace($text, '"', '"')
If Not @error Then $log &= @extended & ' quot' & @CRLF
$text = StringRegExpReplace($text, '&', '&')
If Not @error Then $log &= @extended & ' amp;' & @CRLF
$text = StringRegExpReplace($text, '<', '<')
If Not @error Then $log &= @extended & ' lt' & @CRLF
$text = StringRegExpReplace($text, '>', '>')
If Not @error Then $log &= @extended & ' gt' & @CRLF
$text = StringRegExpReplace($text, ' ', ' ')
If Not @error Then $log &= @extended & ' nbsp' & @CRLF
$text = StringRegExpReplace($text, '¡', '¡')
If Not @error Then $log &= @extended & ' iexcl' & @CRLF
$text = StringRegExpReplace($text, '¢', '¢')
If Not @error Then $log &= @extended & ' cent' & @CRLF
$text = StringRegExpReplace($text, '£', '£')
If Not @error Then $log &= @extended & ' pound' & @CRLF
$text = StringRegExpReplace($text, '©', '©')
If Not @error Then $log &= @extended & ' copy' & @CRLF
; Замена знаков юникода выраженных числовым кодом
$a = StringRegExp($text, '&#(\d+);', 3)
If Not @error Then
$log &= UBound($a) & ' &#(\d+);' & @CRLF
$a = _ArrayUnique($a)
For $i = 1 To $a[0]
$a[$i] = Number($a[$i])
Next
_ArraySort($a, 1, 1) ; чтобы не испортить к примеру число 853 числом 85
; _ArrayDisplay($a, "Массив после сортировки по убыванию")
For $i = 1 To $a[0]
$text = StringReplace($text, '&#' & $a[$i] & ';', ChrW($a[$i]))
Next
EndIf
; i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
; блок исправлений текущей реализации. Если файл в UTF8 то в нём могут быть юникодные символы, которые при сохранении а ASCI будут испорчены
$text = StringRegExpReplace($text, '[“”]', '"') ; неправильные кавычки
If Not @error Then $log &= @extended & ' кавычки “ ”' & @CRLF
$text = StringReplace($text, ChrW(160), ' ') ; заменить пробел 160 на пробел 32
If @extended Then $log &= @extended & ' пробел' & @CRLF
$text = StringReplace($text, ChrW(8226), '') ; удалить кругляшок
If @extended Then $log &= @extended & ' о > ' & @CRLF
$text = StringReplace($text, ChrW(8211), '-') ; длинное тире на правильный минус
If @extended Then $log &= @extended & ' - > -' & @CRLF
$text = StringReplace($text, ChrW(8230), '...') ; троеточие на три точки
If @extended Then $log &= @extended & ' ...' & @CRLF
$text = StringReplace($text, ChrW(8212), '-') ; очень длинное тире на короткое
If @extended Then $log &= @extended & ' - > -' & @CRLF
; i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
; Сохранение в другой файл
$file = FileOpen(@ScriptDir & '\index2.htm', 2)
FileWrite($file, $text)
FileClose($file)
; Сохранение отчёта чтобы увидеть количество замен и найденных символов
$file = FileOpen(@ScriptDir & '\log.txt', 2)
FileWrite($file, $log)
FileClose($file)
MsgBox(0, 'Готово', 'Конвертация HTML-символов в текст')