2017-02-23 4 views
4

Kürzlich lief in einem sehr seltsamen Problem, wo meine Datenbank Zeichenfolgen mit, was wie normale Leerzeichen Zeichen zu sein scheint, sondern tatsächlich etwas anderes sind.Trimmen Leerzeichen ASCII-Zeichen "194" von Zeichenfolge

Zum Beispiel trim() auf den String Anwendung:

"TEST " 

ist mir immer:

"TEST " 

als Ergebnis. Also kopiere ich und füge das letzte Zeichen in die Zeichenkette ein und:

echo ord(' '); 
194 

194? Laut ASCII-Tabellen sollte dassein. Also bin ich an dieser Stelle nur verwirrt. Warum erscheint dieses Zeichen als Leerraum und wie kann ich trim() Zeichen wie dies, wenn trim() fehlschlägt?

Antwort

4

löschen Sie können mit versuchen :

PHP trimmen

$foo = "TEST "; 
$foo = trim($foo); 

PHP str_replace

$foo = "TEST "; 
$foo = str_replace(chr(194), '', $foo); 

WICHTIG: Sie können versuchen, mit chr(194).chr(160) oder '\u00A0'

PHP preg_replace

$foo = "TEST "; 
$foo = preg_replace('#(^\s+|\s+$)#', '', $foo); 

OR (ich bin nicht sicher, ob es gut funktionieren wird)

$foo = "TEST "; 
$foo = preg_replace('#[\xC2\xA0]#', '', $foo); 
+0

Danke. Das einzige, was funktioniert hat, ist 'chr (194) .chr (160)'. Was in aller Welt ist das? – billynoah

+2

[PHP's 'chr()'] (http://php.net/manual/en/function.chr.php) gibt das Zeichen einer ASCII-Codenummer zurück. Sie können die [ASCII-Tabelle] (http://www.asciitable.com/) überprüfen. Wenn Sie den ASCII-Code eines Zeichens erhalten möchten, können Sie ['ord()'] (http://php.net/manual/en/function.ord.php) verwenden. – Condorcho

5

Es ist wahrscheinlicher, eine Zwei-Byte 194160 Sequenz zu sein, die die UTF-8-Codierung eines NO-BREAK SPACE Codepunktes ist (das Äquivalent der   Entität in HTML).

Es ist wirklich kein Leerzeichen, obwohl es wie eins aussieht. (Sie werden sehen, dass zum Beispiel kein Zeilenumbruch stattfindet.) Eine Übereinstimmung mit regulärem Ausdruck für \ s würde ihr entsprechen, aber ein einfacher Vergleich mit einem Leerzeichen wird nicht funktionieren. noch wird trim() es entfernen.

Um NO-BREAK Räume mit einem normalen Raum zu ersetzen, sollten Sie in der Lage sein, etwas zu tun:

$string = str_replace("\u{c2a0}", " ", $string); 

oder

$string = str_replace("\u{c2a0}", "", $string); 

sie

+0

danke für diese Antwort wie es bietet mehr Details, aber leider nicht für mich arbeiten.Für was es wert ist Ich habe lib_mysqludf_preg installiert und war in der Lage, dies zu tun, um meine Tabellen zu beheben: UPDATE Tabelle SET Zelle = trimmen (preg_replace ('/ [[: Leerzeichen:]] + /', '', Zelle)); – billynoah

0

haben das gleiche Problem. Gelöst es mit

trim($str, ' ' . chr(194) . chr(160)) 
Verwandte Themen