PHP trim und Raum nicht funktioniert
Habe ich einige Daten-Import aus einer csv. Das import-Skript packt alle E-Mail-Adressen im csv-und nach der überprüfung Ihnen, importiert Sie in eine db.
Einen Kunden geliefert hat, die das csv-Format, und einige der E-Mails zu haben scheinen, ein Leerzeichen am Ende der Zelle. Kein problem, schneiden Sie die Sauger ab... nope, wird nicht funktionieren.
Scheint sich der Raum nicht ein Raum sein, und nicht so entfernt ist, falls eine Reihe von E-Mails Validierung.
Frage: Irgendeiner Weise kann ich eigentlich erkennen, was das falsche Zeichen ist, und wie kann ich es entfernen?
Nicht sicher, ob einige funky-Codierung, oder etwas anderes passiert, ich habe keine Lust zu gehen durch und entfernen Sie alle manuell! Wenn ich UTF-8 Kodieren Sie die Zeichenfolge zuerst zeigt dieses Zeichen als:
Â
- Haben Sie versucht
var_dump(ord(substr($email, -1)));
und dann vorbei, die Zeichen (mit\xHEX
syntax) zutrim()
? - es ist so eine Sache genannt
Ideographic Space
auch
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das "Platz" nicht betroffen ist
trim()
, der erste Schritt ist, um es zu identifizieren.Verwenden
urlencode()
auf den string. Urlencode wird Prozent-escape alle nicht-druckbaren und eine Menge von druckbaren Zeichen außer ASCII -, so sehen Sie den hexcode des betreffenden Charaktere sofort. Je nachdem, was Sie entdecken, können Sie entsprechend handeln oder aktualisieren Sie Ihre Frage, um zusätzliche Hilfe zu bekommen.trim($value, urlencode("%A0"))
und es funktionierteurldecode("%A0")
, wie es ist, die inverse. PHP ermöglicht das direkte hinzufügen von bytes zu strings mit escape-Sequenz\x
, so dass dieser string wäre"\xA0"
hier:trim($value, "\xA0")
. Und es ist diechr()
- Funktion akzeptiert einen ganzzahligen Wert, der das gleiche tut:trim($value, chr(0xA0)
.0xA0
ist die hex-schreiben für eine ganze Zahl, ähnlich wie160
ist es dezimal schreiben. Beachten Sie, dass diese fügt einfach die byte-und nicht respektiert jeden Zeichensatz-Codierung.Ich hatte ein ähnliches problem, auch das laden von E-Mails von CSVs und Probleme mit "nicht nachweisbar" Leerzeichen.
Gelöst durch ersetzen der häufigsten urlencoded whitespace-chars ". Dies könnte helfen, wenn nicht verwenden können, mb_detect_encoding() und/oder iconv()
Beachten Sie, dass dies NICHT der strip, das "normale" Leerzeichen und entfernt diese Leerzeichen chars von jeder beliebigen Stelle im string - nicht nur Anfang oder Ende.
In den meisten Fällen eine einfache
strip_tags($string)
arbeiten.Wenn die oben nicht funktioniert, dann sollten Sie versuchen, zu identifizieren, die die Zeichen der Rückgriff auf
urlencode()
und dann entsprechend handeln.strip_tags()
nie Leerzeichen.Sehe ich Paare von möglichen Lösungen
1) Letzte Zeichen der Zeichenfolge in PHP und prüfen, ob es ein normales Zeichen (mit regexp zum Beispiel). Wenn es nicht ein normaler Charakter, dann entfernen Sie es.
2) Konvertieren Sie Ihre Zeichen aus UTF-8-Codierung der Sie die CSV-Datei und verwenden Sie str_replace. Zum Beispiel, wenn Sie CSV-codiert in ISO-8859-2