11484 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

J'ai cette requête :
<script>
  $(function() {
    $("#tsccod").autocomplete({
      minLength: 2,
      source: function(request, response) {
        $.ajax({
             url: "plugins/portail/include/portailJquery.php",
          cache: false,
          dataType: "json",
    			data: {
    		    term: request.term,
    				a: 'searchgroupes',
    				j: '1',
    				maxRows: '30'
    			},
          success: function(data) {
            if(!data.length) {
              $("#btrecherche").prop("disabled", true);
              var result = [
                {
                  tsccod: 'Aucun groupement trouvé',
                  tscname: '',
                  tscsrc: ''
                }
              ];
              response(result);
            } else {
              $("#btrecherche").prop("disabled", false);
              response(data);
            }
          },
          error: function() {
            console.log('no data');
          }
        });
      },
    	select: function(event, ui) {
        $("#tsccod").val(ui.item.tsccod + " " + " " + ui.item.tscname + " " + ui.item.tscsrc);
    		$("#intsccod").val(ui.item.tsccod);

    		return false;
    	}
    })
    .data("ui-autocomplete")._renderItem = function(ul, item) {
      ul.addClass("searchClient");
      return $("<li>")
        .data("ui-autocomplete-item", item)
        .append("<div><strong>" + item.tscsrc + "</strong> - " + item.tsccod + " " + item.tscname + "</div>")
        .appendTo(ul);
    };
  });
</script>


Qui exécute une requête sur ma base de données mysql. Le problème est lorsque le champ tscsrc contient un caractère accentué le résultat ne s'affiche pas.

Dans le header de ma page html j'ai bien mis
<meta charset="utf-8">


Le débugage de firefox me donne ça comme requête
Entêtes de la réponse
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 Apr 2020 13:06:08 GMT
Server: Apache/2.4.10 (Debian)


En-têtes de la requête
Host: ....
User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: fr-FR,fr;q=0.5
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Connection: keep-alive
Referer:  http://.../index.php?static18/portail&p=crm&a=groupes
 
Cookie: PHPSESSID=ue1ri0tgvah6s12s8lqp9mph21
Pragma: no-cache
Cache-Control: no-cache


La table mysql est en latin-1, j'ai essayé de la passer en UTF-8 et de re-importer les données mais même résultat.

Est-ce que vous avez une idée pour résoudre mon problème ?
Merci d'avance.
Qu'est-ce qu'il y a coté serveur ?
Si c'est du PHP il faut probablement utiliser la fonction UTF8_encode() pour les données qui proviennent de la base.
Salut, côté serveur c'est bien du PHP.

Dans la fonction searchGroupes appelé par ajax avant d'envoyer le résultat je passe un coups de utf8_encode mais rien ne se passe.

function public searchGroupes()
        [... Requête SQL...]
		$value = array_map('utf8_encode', $tsccod);
		if (empty($tsccod)) {
			echo json_encode(array('label' => 'Inconnue', 'value' => 'Inconnue'));
  	} else {
			echo json_encode($value);
  	}
	}


Et dans les logs apache j'ai :
PHP Warning:  utf8_encode() expects parameter 1 to be string, array given in /var/www/html/plugins/portail/include/portailJquery.php on line 164, referer:  http://.../index.php?static18/portail&p=crm&a=groupes


Et pourtant $tsccod est bien un tableau contenant des valeurs :
Array
(
    [0] => Array
        (
            [tsccod] => 31
            [tscname] => name
            [tscsrc] => Profession
        )
)


Mais dès que j'ajoute le array_map mon tableau est complètement vide
Array
(
    [0] => 
)