Frage Erinnerung:.
“... Ich bemerkte Zeichen wie ''‘ mit â € ™ ersetzt wird ... i beschlossen, solchen Müll characeters ersetzen mit Istwerten nach dem Herunterladen von Daten Was Ich brauche ist eine Liste von solchen Garbage String und ihre äquivalenten Zeichen. "
Genau mit diesem Teil zu tun: „Was ich brauche, ist eine Liste solchen Müll-String und ihre äquivalent Zeichen“
PHP, können Sie diese Zeichen und ihre Gleichwertigkeit erzeugen. Es ist unpraktisch, mit allen 1.111.998 Unicode-Punkten oder 109.449 Utf8-Symbolen zu arbeiten. Sie können den ASCII-Bereich in der folgenden Schleife zwischen & # 128 und & # 258 oder einem anderen Bereich verwenden, der für Ihren Kontext relevanter ist.
<?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>";
?>
Aus Erfahrung in einem ASCII-Kontext, die meisten "Müll" Symbole im Bereich & # 128 bis & # 257 + (selten) & # 8129 bis & # 8246 stammen.
Damit die "Müll" -Symbole angezeigt werden, muss der html-Seitenzeichensatz auf iso-1 oder den anderen Zeichensatz gesetzt werden, der das Problem verursacht hat. Sie werden nicht angezeigt, wenn der Zeichensatz auf utf-8 eingestellt ist.
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
.
„i beschlossen, solchen Müll characeters mit Istwerten zu ersetzen, nachdem das Herunterladen von Daten“
Sie können den „Müll“ mit php utf8_decode() rückgängig zu machen, die eigentlich mehr „Müll“ auf schaffen würden schon "Müll". Aber Sie können die einfache und schnelle Suche und ersetzen php str_replace() -Funktion verwenden.
Zuerst generieren Sie 2 Arrays für jede Gruppe von "Müll" -Symbole, die Sie ersetzen möchten. Das erste Array ist der Suchbegriff:
<?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");
?>
Das zweite Array ist der ersetzen Begriff:
<?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";
?>
Jetzt haben Sie zwei Arrays bekommen, die Sie kopieren und einfügen können, verwenden und reinigen Wiederverwendung zu alle Ihre infizierten Strings wie folgt aus:
$InfectedString = str_replace($SearchArr,$ReplaceArr,$InfectedString);
Hinweis: utf8_decode() ist keine Hilfe für die Reinigung von „Müll“ Symbole auf. Aber es kann verwendet werden, um weitere Verunreinigungen zu verhindern. Alternativ kann eine mb_-Funktion nützlich sein.
+1 Übereinstimmen und betonen: Wahrscheinlich tut der Server das Richtige, und Sie müssen entweder Ihren Code oder Ihre Werkzeuge anpassen. Im einfachsten Fall ist es vielleicht nur erforderlich, das Anzeigewerkzeug zu konfigurieren, mit dem Sie die Ergebnisse überprüfen, um UTF-8 anstelle von CP-1252 oder ISO-8859-1 oder was auch immer anzuzeigen. – tripleee
Einverstanden. Wenn Sie die Ausgabe mit einem Webbrowser wie Internet Explorer anzeigen, können Sie den Zeichensatz mit einer einfachen Menüoption ändern. (Gehen Sie zu "Ansicht" und wählen Sie "Encoding", dann wechseln Sie von "Westeuropäisch (Windows)" zu "UTF-8". Sie können auch die "Auto-Select" -Option deaktivieren.) Wenn die Codierung eingestellt ist In UTF-8 nimmt der Internet Explorer die 3 "Müllzeichen", interpretiert sie als UTF-8-Bytes, konvertiert sie zurück in ein Unicode-Zeichen und zeigt das Unicode-Zeichen an. In diesem Fall müssen sich die Librets nicht ändern. Sie ändern nur die Art, wie Sie die Ausgabe anzeigen. – librik
Danke für die Klärung. LIBRETS bietet eine Methode zum Überschreiben der Codierung, aber es scheint, dass es nicht funktioniert. Das Librets-Forum ist erbärmlich und erlaubt niemandem, Fragen zu stellen, es sei denn, sie genehmigen den registrierten Benutzer und sie haben mich auch nach einem Monat nicht genehmigt. – ZafarYousafi