Jump to content
Sapinn

Destacar o que foi alterado em um texto

Recommended Posts

Salve quebrada, firmesa? É o seguinte estou desenvolvendo um web site em que os aluno enviam textos para o professor corrigir. O que eu quero é que quando o professor corrigir o texto e aluno for ver mostrar o que foi corrigido. 

Por exemplo se o aluno digitar a seguinte frase:

Eu gosta mas de você.

Quando ele for ver a correção terá:

Eu gosto mas(o correto seria "mais") de você.

 

Alguém pode me ajudar aqui?

 

Share this post


Link to post
Share on other sites

Cara, acredito que têm muitas classes prontas que fazem isso, você não precisará reinventar a roda.

 

Veja: https://github.com/gorhill/PHP-FineDiff / http://www.raymondhill.net/finediff/viewdiff-ex.php

 

Vários exemplos: https://pt.stackoverflow.com/questions/292565/comparar-textos-php

 

Tente algo, se tiver dificuldade posta aí.

Share this post


Link to post
Share on other sites

Oi acho que nesse caso você precisaria trabalhar com algum tipo de IA para adicionar essas variáveis de mais e etc a string de comparação... parece ser um sistema bem complexo gostaria de acompanhar o andamento da sua solução.

 

Se puder, compartilhe conosco.

 

Se você quiser comparar um texto com o outro, você pode utilizar o código abaixo:

<?php 
    function get_decorated_diff( $old, $new )
    {
        if( $old != $new )
        {
            $old = strip_tags($old);
            $new = strip_tags($new);

            $from_start = strspn( $old ^ $new, "\0" );        
            $from_end   = strspn( strrev($old) ^ strrev($new), "\0" );

            $old_end = strlen($old) - $from_end;
            $new_end = strlen($new) - $from_end;

            $start  = substr( $new, 0, $from_start );
            $end    = substr( $new, $new_end );
            $new_diff = substr( $new, $from_start, $new_end - $from_start );  
            $old_diff = substr( $old, $from_start, $old_end - $from_start );

            $new = "$start<ins style='background-color:#ccffcc'>$new_diff</ins>$end";
            $old = "$start<del style='background-color:#ffcccc'>$old_diff</del>$end";
        }
        
        return array("old"=>$old, "new"=>$new);
    }


    $str1 = 'Oi André, tudo bem com você ?';
    $str2 = 'Oi André, tudo certo com você ? ';

	
	$comparacao = get_decorated_diff($str1, $str2);
   var_dump($comparacao);

 

 

Abraço.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Sapinn
      Salve salve! Nuca intendi como isso realmente funciona por isso gostaria da ajuda de vcs. Estou desenvolvendo um sistema de historias e acho que seria interessante no envio dessas historia além dos texto imagem ilustrativas, mais ou menos como blogs de noticias fazem, mas como posso enviar texto e imagem e depois retorna-los juntos? Eu sei com enviar imagens em php mas gostaria de enviar a imagem e o texto colocando ambos em um textarea acho que assim ficaria bem mais interessante alguém pode me ajuda?
       
    • By manoaj
      Boa noite pessoal!
      Alguém ai entente dos checkouts do Mercado Pago pra me explicar como eu obtenho os dados da preferência criada através da url disponível na API
      https://api.mercadopago.com/checkout/preferences/:id?access_token=ACCESS_TOKEN_ENV  
    • By alan de souza arantes
      Boa tarde Galera!
       
      Tenho um cod que extrai relatórios do MYSQL em forma de Excel, meu problema é que quando o campo que busco esta vazio ele preenche com outra informação qualquer.
      Como eu resolvo isso?
       
      <?php
      include("../conexao_checkout.php");

      session_start();
      $usuario     = $_SESSION['UsuarioID'];
      $usuario_nome  = $_SESSION['UsuarioNome'];
      $ip      = $_SERVER["REMOTE_ADDR"];
      $data_contratado       = date('Y-m-d H:i:s');
      $exibicao   = $_POST["exibicao"];
      $filtro     = $_POST["filtro"];
      $entrega    = $_POST["entrega"];
      $contrata   = $_POST["contrata"];
      if ($filtro > 0) {
          $cli = " AND `id_cliente` = ".$filtro;
      }else{
          $cli = "";
      }
      if ($entrega  != "") {
          $data2 = str_replace('/', '-', $entrega);
          $nova_data2 = strftime("%Y-%m-%d", strtotime($data2));
          $ent = "AND `prazo_entrega` LIKE '%".$nova_data2."%' ";
      }else{
          $ent = "";
      }
      if ($contrata  != "") {
          $data1 = str_replace('/', '-', $contrata);
          $nova_data = strftime("%Y-%m-%d", strtotime($data1));
          $cont = "AND `contratacao` LIKE '%".$nova_data."%' ";
      }else{
          $cont = "";
      }

      $results = mysqli_query($conexao, "SELECT * FROM `servicos_filiais` WHERE `tecnico_interno` = $usuario {$cli} {$ent} {$cont};");

      echo '
          <table class="table table-hover" style="display: none;">
                      <thead>
                          <th>ID</th>
                          <th>Ordem</th>
                          <th>COd Serviço</th>
                          <th>Nome Serviço</th>
                          <th>Cliente</th>
                          <th>Filial</th>
                          <th>Acompanhamento</th>
                          <th>Contratação</th>
                          <th>Solicitante</th>
                          <th>Coordenação</th>
                          <th>Técnico</th>
                          <th>Técnico interno</th>
                          <th>Total do Serviço</th>
                          <th>Total de Parcelas</th>
                          <th>Status</th>
                          <th>Observação</th>
                          <th>Data da Observação</th>                    
                      </thead>
                      <tbody>
                          
                      
        ';
      while ($row = mysqli_fetch_assoc($results)) {
          $id_cliente       = $row['id_cliente'];
          $id_servico_      = $row['id'];
          $id_filial        = $row['id_filial'];
          $id_coordenacao   = $row['coordenacao'];
          $id_tecnico       = $row['tecnico'];
          $id_tecnico_int   = $row['tecnico_interno'];
          $observacao       = $row['texto'];
          $data_3           = $row['data'];

          $consulta   = mysqli_query($conexao, "SELECT * FROM `clientes` WHERE `id` = {$id_cliente}; ");
          while ($row01 = mysqli_fetch_assoc($consulta)) {
              $nomedocliente = $row01['nome_cliente'];
          }
          $consulta01   = mysqli_query($conexao, "SELECT * FROM `filiais` WHERE `id` = {$id_filial}; ");
          while ($row02 = mysqli_fetch_assoc($consulta01)) {
              $nome_filial = $row02['nome_filial'];
          }
          $consulta02   = mysqli_query($conexao, "SELECT * FROM `login_funcionarios` WHERE `id` = {$id_coordenacao}; ");
          while ($row03 = mysqli_fetch_assoc($consulta02)) {
              $coordenacao = $row03['nome'];
          }
          $consulta03   = mysqli_query($conexao, "SELECT * FROM `login_funcionarios` WHERE `id` = {$id_tecnico}; ");
          while ($row04 = mysqli_fetch_assoc($consulta03)) {
              $tecnico = $row04['nome'];
          }
          $consulta04   = mysqli_query($conexao, "SELECT * FROM `login_funcionarios` WHERE `id` = {$id_tecnico_int}; ");
          while ($row05 = mysqli_fetch_assoc($consulta04)) {
              $tecnico_interno = $row05['nome'];
          }
          $consulta05   = mysqli_query($conexao, "SELECT * FROM `observacao_servicos` WHERE `id_servico` = {$id_servico_}; ");
          while ($row06 = mysqli_fetch_assoc($consulta05)) {
              $observacao_texto = $row06['texto'];
          }
          $consulta06   = mysqli_query($conexao, "SELECT * FROM `observacao_servicos` WHERE `id_servico` = {$id_servico_}; ");
          while ($row07 = mysqli_fetch_assoc($consulta06)) {
              $data_3 = $row07['data'];
          }
          $gerando_status = mysqli_query($conexao, "SELECT * FROM `detalhes_servico` WHERE `id_servico` = {$id_servico_}");
          $contar_parcelas = mysqli_num_rows($gerando_status);
          while($row3 = mysqli_fetch_assoc($gerando_status)){
              $status = $row3['status'];
              if(($status == 0) or ($status == 3) or ($status == 2)){
                  $nao_concluido += 1;
              }
          }
          // ---------------- STATUS ----------------- //
          if ($contar_parcelas == 1) {
              $busca_tipo_status = mysqli_query($conexao, "SELECT * FROM `detalhes_servico` WHERE `id_servico` = {$id_servico_} AND `tipo_servico` = 1");
              while ($row_busca_status = mysqli_fetch_assoc($busca_tipo_status)) {
                  $status_final = $row_busca_status['status'];
              }
          }
          if ($contar_parcelas == 2) {
              $busca_tipo_status = mysqli_query($conexao, "SELECT * FROM `detalhes_servico` WHERE `id_servico` = {$id_servico_} AND `tipo_servico` = 2");
              while ($row_busca_status = mysqli_fetch_assoc($busca_tipo_status)) {
                  $status_final = $row_busca_status['status'];
              }
          }
          if ($contar_parcelas == 3) {
              $busca_tipo_status = mysqli_query($conexao, "SELECT * FROM `detalhes_servico` WHERE `id_servico` = {$id_servico_} AND `tipo_servico` = 3");
              while ($row_busca_status = mysqli_fetch_assoc($busca_tipo_status)) {
                  $status_final = $row_busca_status['status'];
              }
          }
          if($status_final ==0){
              $nome_do_status = "A Protocolar";
          }
          if($status_final ==1){
              $nome_do_status = "Concluído";
          }
          if($status_final ==2){
              $nome_do_status = "Protocolado";
          }
          if($status_final ==3){
              $nome_do_status = "Em Andamento";
          }
          if($status_final ==4){
              $nome_do_status = "Pendência Forma";
          }
          if($status_final ==5) {
              $nome_do_status = "Pendência Cliente";
              
          }
          if($status_final ==6) {
              $nome_do_status = "Rescindido";
          }
          // ---------------- STATUS ----------------- //

          echo "<tr>";
          echo "<td>".$row['id']."</td>";
          echo "<td>".$row['ordem_de_servico']."</td>";
          echo "<td>".$row['id_servico']."</td>";
          echo "<td>".$row['nome_servico']."</td>";
          echo "<td>".$nomedocliente."</td>";
          echo "<td>".$nome_filial."</td>";
          echo "<td>".date('d/m/Y', strtotime($row['prazo_entrega']))."</td>";
          echo "<td>".date('d/m/Y', strtotime($row['contratacao']))."</td>";
          echo "<td>".$row['solicitante']."</td>";
          echo "<td>".$coordenacao."</td>";
          echo "<td>".$tecnico."</td>";
          echo "<td>".$tecnico_interno."</td>";
          echo "<td>".number_format($row['valor'], 2, ',', '.')."</td>";
          echo "<td>".$row['parcela_comissao']."</td>";
          echo "<td>".$nome_do_status."</td>";
          echo "<td>".$observacao_texto."</td>";
          echo "<td>".date('d/m/y', strtotime($data_3))."</td>";
          echo "</tr>";
      }
      echo '</tbody>
                  </table>
              
              ';
      echo '
        <script src="assets/js/jquery.table2excel.js"></script>
        <script>
          $(function() {
            $(".table").table2excel({
              exclude: ".noExl",
              name: "Lista de Serviços",
              filename: "lista_servicos",
              fileext: ".xls",
              exclude_img: true,
              exclude_links: true,
              exclude_inputs: true
            });
          });
        </script> 
        ';

      $insere_registro   = mysqli_query($conexao, "INSERT INTO `historico_acoes` (`id`, `nome_usuario`, `id_usuario`, `acao`, `ip`, `data`, `tipo`) VALUES (NULL, '{$usuario_nome}', {$usuario}, 'Exportou Relatório de serviços cadastrados', '{$ip}', '{$data_contratado}', 6);");

      mysqli_close($conexao);
      ?>
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.