Я заполняю <select>
из JSON.
Проблема заключается в том, что когда значение, полученное из базы данных mysql, имеет специальные символы, такие как Ñ
или же Á
, Я собираюсь NULL
в <select>
,
Вот мой код JS:
function llenarEspecialidad()
{
var espec = $("#comboEspecialidad").val();
var $select = $("#comboMedicoIC");
document.formAgregar.comboMedicoIC.length=0;
document.formAgregar.comboMedicoIC.options[0] = new Option("Seleccione","0","defaultSelected","");
$(function(){
var items="";
$.getJSON("internacionLlenarMedicos.php?&idEspecialidad="+espec,function(data){
$.each(data,function(index,item)
{
items+="<option value='"+item.idMedico+"'>"+item.Medico+"</option>";
});
$select.append(items);
});
});
};
А вот код на стороне сервера:
$espe = $_REQUEST["idEspecialidad"];
$sql_depto = "SELECT idMedico, CONCAT(apellido, ',', nombre) As Medico FROM medicos where activo is Null and ( (".$espe."=0) or (".$espe."<>0 and ".$espe." = idEspecialidad ) ) ORDER by apellido ASC";
$rs_depto = mysql_query($sql_depto, $conexion);
$data = array();
while($row_depto = mysql_fetch_assoc($rs_depto))
$data[] =$row_depto;
echo json_encode($data);
Оба PHP-файла имеют кодировку ANSI, я не могу кодировать в UTF-8, потому что если я это сделаю, то возникнут другие проблемы.
Проблема в том, что json_encode правильно работает только со строками utf-8, в противном случае он вернет значение null, поэтому вам придется его кодировать.
Так что вы можете попробовать utf8_decode
// this is just an example for one dimensional arrays
$your_array = array_map( "utf8_decode" , $your_array );
если это не работает, вы должны проверить набор символов или сопоставление БД и использовать mb_convert_encoding
Других решений пока нет …