recordatorio Pregunta:.
" ... me di cuenta de personajes como ''' se sustituye por un € ™ ... decidí sustituir tales characeters basura con valores reales después de la descarga de datos Lo Lo que necesito es una lista de esa cadena de basura y sus caracteres equivalentes ".
En sentido estricto se trata de esta parte:
"Lo que necesito es una lista de tales cadena de basura y sus equivalentes caracteres."
Usando php, puede generar estos caracteres y su equivalencia. Trabajar con todos los 1,111,998 puntos Unicode o 109,449 símbolos Utf8 no es práctico. Puede usar el rango ASCII en el siguiente ciclo entre & # 128 y & # 258 u otro rango que sea más relevante para su contexto.
<?php
for ($i=128; $i<258; $i++)
$tmp1 .= "<tr><td>".htmlentities("&#$i;")."</td><td>".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."</td><td>&#".$i.";</td></tr>";
echo "<table border=1>
<tr><td>&#</td><td>"Garbage"</td><td>symbol</td></tr>";
echo $tmp1;
echo "</table>";
?>
Por experiencia, en un contexto ASCII, la mayoría de los símbolos "basura" se originan en el rango & # 128 a # 257 & + (rara vez) & # 8129 a # 8246 &.
Para que se muestren los símbolos "basura", el juego de caracteres de la página html debe establecerse en iso-1 o en cualquier otro juego de caracteres que haya causado el problema en primer lugar. No se mostrarán si el juego de caracteres está configurado en utf-8.
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
.
"i decidió sustituir tales characeters basura con valores reales después de la descarga de datos"
no se puede deshacer la "basura" con utf8_decode php(), lo que en realidad crear más "basura" en la ya "basura". Pero puede usar la búsqueda simple y rápida y reemplazar la función php str_replace().
Primero, genere 2 matrices para cada conjunto de símbolos "basura" que desea reemplazar. La primera matriz es el término de búsqueda:
<?php
//ISO 8859-1 (Latin-1) special chars are found in the range 128 to 257
$tmp1 = "\$SearchArr = array(";
for ($i=128; $i<258; $i++)
$tmp1 .= "\"".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."\", ";
$tmp1 = substr($tmp1,0,strlen($tmp1)-2);//erases last comma
$tmp1 .= ");";
$tmp1 = htmlentities($tmp1,ENT_NOQUOTES,"utf-8");
?>
la segunda matriz es reemplazar el término:
<?php
//Adapt for your relevant range.
$tmp2 = "\$ReplaceArr = array(\n";
for ($i=128; $i<258; $i++)
$tmp2 .= "\"&#".$i.";\", ";
$tmp2 = substr($tmp2,0,strlen($tmp2)-2);//erases last comma
$tmp2 .= ");";
echo $tmp1."\n<br><br>\n";
echo $tmp2."\n";
?>
Ahora, tienes 2 matrices que se pueden copiar y pegar a utilizar y reutilizar para limpiar ninguna de sus cuerdas infectados de esta manera:
$InfectedString = str_replace($SearchArr,$ReplaceArr,$InfectedString);
Nota: utf8_decode() no es de ayuda para la limpieza de los símbolos "basura". Pero, puede usarse para prevenir una mayor contaminación. Alternativamente, una función mb_ puede ser útil.
+1 Concur y enfatice: Lo más probable es que el servidor esté haciendo lo correcto, y necesita adaptar su código o sus herramientas. En el caso más simple, tal vez todo lo que se necesita es configurar la herramienta de visualización que está utilizando para inspeccionar los resultados para visualizar UTF-8 en lugar de CP-1252 o ISO-8859-1 o lo que sea. – tripleee
De acuerdo. Si está viendo la salida usando un navegador web como Internet Explorer, puede cambiar el conjunto de caracteres con una simple opción de menú. (Vaya a "Ver" y seleccione "Codificación", luego cambie de "Europeo occidental (Windows)" a "UTF-8". También puede desactivar la opción "Seleccionar automáticamente") Cuando se establece la codificación para UTF-8, Internet Explorer tomará los 3 "caracteres basura", los interpretará como bytes UTF-8, los convertirá nuevamente en un carácter Unicode y mostrará el carácter Unicode. En este caso, los libretos no necesitan cambiar; solo cambias la forma en que ves la salida. – librik
gracias por aclarar. LIBRETS proporciona un método para anular la codificación, pero parece que no funciona. El foro de Librets es patético y no permiten que nadie publique preguntas a menos que aprueben al usuario registrado y no me han aprobado incluso después de un mes. – ZafarYousafi