JQuery autocomplete no muestra ñ sino la entidad HTML Ñ

Tengo un problema con la presentacion del contenido de las coincidencias que se muestran en un textbox con la libreria autocomplete de JQuery ya que mi texto lleva ñ y pone simbolos raros, creo que no esta decodificando bien mi texto pero no se cómo corregir este problema.

Hago una llamada AJAX a una página que me devuelve los resultados de coincidencia y siento que el problema esta en el AJAX:


Búsqueda

mi json que devuelve Mismo texto en el JSON con Ñ

3
задан 17.11.2016, 22:38
3 ответа

Поскольку он появляется в изображении, это не проблема кодирования в UTF, но они получены от файла автозавершенный (./coincidenciaRazonSocial) организации HTML. В случае Ñ, кодировавший как Ñ.

Чтобы это решать, мы можем изменять ответ, полученный AJAX в этой части кода:

success: function (data) {
    response($.map(data, function (item) {
        return {
            label: item.nombre,
            value: item.nombre,
        }
    }));
}

Призывая в функцию декодировать:

success: function (data) {
    response($.map(data, function (item) {
        var nombreDecodificado = decodificarEntidadesHTMLNumericas(item.nombre);
        return {
            label: nombreDecodificado,
            value: nombreDecodificado
        }
    }));
}

И использовать следующую функцию, чтобы превращать любую десятичную организацию в Ваш соответствующий характер:

function decodificarEntidadesHTMLNumericas(texto) {
    return texto.replace(/&#(\d{1,8});/g,function (m, ascii) {
        return String.fromCharCode(ascii);
    });
}

Заметь: эта функция только применяется для числовых десятичных организаций как показанная в изображении (Ñ), и он не заменяет другие как á, > или Σ (шестнадцатеричный).



Чтобы показывать пример, я переслал текстовый файл с 3 статьями ("DISEÑO 01", ..02 и ..03), который мы получим из-за AJAX:

$(document).ready(function () {
    $("#txtRazon").autocomplete({
        source: function (request, response) {
            $.ajax({
                type: "post",
                url: "http://mariano.freevar.com/34461/coincidenciaRazonSocial.txt",                    
                dataType: "json",
                data: {
                    q: request.term
                },
                success: function (data) {
                    response($.map(data, function (item) {
                        var nombreDecodificado = decodificarEntidadesHTMLNumericas(item.nombre);
                        return {
                            label: nombreDecodificado,
                            value: nombreDecodificado
                        }
                    }));
                }
            });
        }
    });

});

function decodificarEntidadesHTMLNumericas(texto) {
    return texto.replace(/&#(\d{1,8});/g,function (m, ascii) {
        return String.fromCharCode(ascii);
    });
}
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

<!-- HTML -->
<div>
    <h5><span class="glyphicon glyphicon-th"></span> Búsqueda</h5>
    <form id="formularoBuscar" method="post" class="form-horizontal " action="#">
        <div id="rs" style="display: block">
            <div class="row">
                <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                    <div class="form-group">
                        <label class="col-lg-1 control-label">Razón social</label>
                        <div class="col-lg-11">
                            <input type="text" class="form-control" id="txtRazon" />
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </form>
</div>
2
ответ дан 24.11.2019, 12:34
  • 1
    функция помечает мне ошибку в " = > " – Ivxn 17.11.2016, 21:48
  • 2
    @lvxn Agregué snippet и modifiqué funció n с versió n не такая современная – Mariano 17.11.2016, 22:15
  • 3
    если это было чем-то, что не знало, как делать это спасибо bro – Ivxn 17.11.2016, 22:36
  • 4
    друг сейчас у меня есть проблема с ampersond у меня появляется этот код " & amp; " поскольку я могу интегрировать это в функцию, с которой ты помог мне – Ivxn 24.11.2016, 20:45
  • 5
    Он был готов ответить тебе, когда я увидел, что ты напечатал новый вопрос и respondí ahí: es.stackoverflow.com/a/35802/127 – Mariano 24.11.2016, 22:14

Так как реестры прибывают кодировавшие как организации HTML в json, мне приходят в голову 2 возможных решения

  1. Чинить jQuery Autocomplete для того, чтобы он использовал стоимость label как HTML (innerHTML) вместо texto (innerText).

    В doc, существует соединение в расширение Скотта Гонсалеса, который это делает.

  2. Декодировать их перед тем, как возвращать их.

    В coincidenciaRazonSocial, ты был бы должен:

    • Имя не кодировалось в DB: Контролировать, что ты не кодировал nombre. Например:

      //PHP
      $empresa['nombre'] = htmlentities($empresa['nombre']); // No hacer esto
      
      // ASP.NET
      Dim nombre As String = System.Web.HttpUtility.HtmlEncode(nombreEmpresa) // No hacer esto
      
    • Имя, ЕСЛИ он кодировался в DB: Тогда ты был бы должен декодировать их. Например:

      // PHP
      $empresa['nombre'] = html_entity_decode($empresa['nombre']); // decode el nombre
      
      // ASP.NET
      Dim nombre As String = System.Web.HttpUtility.HtmlDecode(nombreEmpresa)
      
2
ответ дан 24.11.2019, 12:34

В моем случае я работал с CodeIgniter и Jquery, что я funcionГі состояло в том, чтобы использовать следующего mГ©todo

public function autocompletar($q){
$this->db->select('*');
$this->db->like('nombre', $q);
$query = $this->db->get('empresa');
if($query->num_rows() > 0){
  foreach ($query->result_array() as $row){
    $new_row['label']=htmlspecialchars(stripslashes($row['nombre']));
    $new_row['value']=htmlentities(stripslashes($row['id']));
    $row_set[] = $new_row; //build an array
  }
  echo json_encode($row_set); //format the array into json data
}
}

В label, я использую htmlspecialchars и с этим solucionГ© тема.

типов Привета

0
ответ дан 24.11.2019, 12:34