{"id":1440,"date":"2022-05-05T15:50:04","date_gmt":"2022-05-05T18:50:04","guid":{"rendered":"https:\/\/gladiston.net.br\/?page_id=1440"},"modified":"2022-09-14T10:53:46","modified_gmt":"2022-09-14T13:53:46","slug":"como-extrair-apenas-o-texto-de-um-conteudo-html","status":"publish","type":"page","link":"https:\/\/gladiston.net.br\/en\/banco-de-dados\/como-extrair-apenas-o-texto-de-um-conteudo-html\/","title":{"rendered":"Como extrair apenas o texto de um conte\u00fado HTML"},"content":{"rendered":"\n<p>Qualquer que seja a linguagem de programa\u00e7\u00e3o, para ela ser considerada boa suficiente precisa ter os comandos necess\u00e1rios de estrutura de loop, condicionantes, vari\u00e1veis e alguns outros elementos. O mesmo vale para linguagens procedurais SQL(psql daqui em diante).<\/p>\n\n\n\n<p>Talvez um excelente exemplo para provar o valor da linguagem psql do banco de dados FirebirdSQL seja como extrair de um conte\u00fado HTML apenas o texto. Eu fiz o exemplo abaixo alguns anos atr\u00e1s com base noutro c\u00f3digo que extra\u00eda o conte\u00fado de um RTF. Comparado a extra\u00e7\u00e3o de um RTF, a extra\u00e7\u00e3o a partir de um HTML \u00e9 bem mais simples porque envolve apenas remover  o que est\u00e1 entre os delimitadores &#8220;&lt;&#8221; e &#8220;&gt;&#8221;<\/p>\n\n\n\n<p>O c\u00f3digo abaixo far\u00e1 essa extra\u00e7\u00e3o, mas ao inv\u00e9s de voc\u00ea apenas &#8220;copiar&#8221; e &#8220;colar&#8221; para suas atividades, estude-o, veja a l\u00f3gica utilizada porque se voc\u00ea entend\u00ea-la poder\u00e1 usar a mesma l\u00f3gica para extrair apenas conte\u00fados desejados de formul\u00e1rios ou at\u00e9 mesmo de arquivos PDF e Postscript.<\/p>\n\n\n\n<p>O psql abaixo est\u00e1 no formato do FirebirdSQL para SQL Functions, SQL Functions s\u00e3o fun\u00e7\u00f5es que retornam apenas 1 tipo de informa\u00e7\u00e3o, no exemplo abaixo ela se chamar\u00e1 GET_UNHTML e tem um par\u00e2metro de entrada que \u00e9 um blob do tipo texto e retorna o conte\u00fado como blob em formato blob texto tamb\u00e9m, por\u00e9m plain-text.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">create or alter function GET_UNHTML (\n    P_SOURCE_HTML blob sub_type text)\nreturns blob sub_type text\nas\ndeclare variable TAGSTART integer;\ndeclare variable TAGFINISH integer;\ndeclare variable TAGFOUND blob sub_type text;\ndeclare variable RESULT_TEXT blob sub_type text;\nBEGIN\n  \/* essa procedure\/fun\u00e7\u00e3o retorna um texto (blob) sem a por\u00e7\u00e3o de\n   codigo de tags HTML resultando em conte\u00fado texto plain-text, ex:\n   ret=GET_UNHTML(&lt;html&gt;texto&lt;b&gt; sem as tags&lt;\/b&gt;&lt;\/html&gt;);\n   O resultado ser\u00e1 o texto sem os c\u00f3digos de controle RTF:\n   texto puro sem as tags html\n   Portanto, plain-text!\n   Muito \u00fatil para tornar um texto HTML analis\u00e1vel por um programa ou outra psql\n   by gladiston.santana[em]gmail.com\n  *\/\n  result_text='';\n  p_source_html=trim(:p_source_html);\n\n  tagstart = position ('&lt;', :p_source_html);\n  while (:tagstart &gt; 0) do\n  begin\n    tagfinish = position ('&gt;', :p_source_html, :tagstart);\n    if (:tagfinish&lt;:tagstart) then\n      tagfinish=char_length(:p_source_html);\n    tagfound = substring (:p_source_html from :tagstart for ((:tagfinish - :tagstart) + 1));\n    p_source_html = replace (:p_source_html, :tagfound, '');\n    tagstart = position ('&lt;', :p_source_html);\n  end\n  \n  result_text = :p_source_html;\n\n  return result_text;\nEND<\/pre><\/div>\n\n\n\n<p>Modo de usar:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">texto_puro=GET_UNHTML(string_html);<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Vale esclarecer que opera\u00e7\u00f5es com blobs n\u00e3o s\u00e3o perform\u00e1ticas, extrair um plain-text de um blob HTML leva tempo e se voc\u00ea precisa fazer isso num grupo de registros em loop para procurar um CPF, CNPJ ou algo do tipo talvez esteja fazendo isso do jeito errado. Situa\u00e7\u00f5es que requerem m\u00e1xima performance, talvez seja melhor pagar um pre\u00e7o maior e adicionar mais um campo para armazenar a mesma vers\u00e3o do conte\u00fado HTML por\u00e9m plain-text, \u00e9 certo que isso quase dobrar\u00e1 o armazenamento, por\u00e9m em contrapartida ter\u00e1 uma vers\u00e3o HTML analis\u00e1vel j\u00e1 pronta e obter\u00e1 a melhor performance poss\u00edvel para suas buscas ou analises. Claro que ao usar essa solu\u00e7\u00e3o, analise se extrair\u00e1 o plain-text no lado cliente ou usar essa SQL Function no lado servidor, escolha a op\u00e7\u00e3o que no seu contexto se encaixar melhor.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Qualquer que seja a linguagem de programa\u00e7\u00e3o, para ela ser considerada boa suficiente precisa ter os comandos necess\u00e1rios de estrutura de loop, condicionantes, vari\u00e1veis e alguns outros elementos. O mesmo vale para linguagens procedurais SQL(psql daqui em diante). Talvez um excelente exemplo para provar o valor da linguagem psql do banco de dados FirebirdSQL seja [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":1109,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"footnotes":""},"class_list":["post-1440","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1440","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/comments?post=1440"}],"version-history":[{"count":11,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1440\/revisions"}],"predecessor-version":[{"id":2023,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1440\/revisions\/2023"}],"up":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1109"}],"wp:attachment":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/media?parent=1440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}