2010-04-07 12 views
12

Muszę wyczyścić ciąg przychodzący (kopiować/wklejane) z różnych aplikacji pakietu Microsoft Office (Excel, Access i Word), każdy z własnym zestawem kodowania.Mam ciąg znaków z " u00a0" i muszę go zastąpić przez "" str_replace ulega awarii

Używam json_encode do celów debugowania, aby móc zobaczyć każdą zakodowaną postać.

Jestem w stanie posprzątać wszystko, co znalazłem do tej pory (\ r \ n) z str_replace, ale z \ u00a0 Nie mam szczęścia.

$string = '[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]'; //this is the output from json_encode 

$clean = str_replace("\u00a0", "",$string); 

powraca:

[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected] 

to jest dokładnie to samo; całkowicie ignoruje \ u00a0.

Czy istnieje sposób obejścia tego? Poza tym, czuję, że wymyślam nowe koło, czy istnieje funkcja/klasa, która całkowicie usuwa KAŻDY możliwy znak KAŻDEGO możliwego kodowania?

____EDIT____

Po pierwszych dwóch odpowiedzi muszę wyjaśnić, że mój przykład nie działa, ponieważ jest to wyjście z json_encode, a nie rzeczywisty ciąg!

Odpowiedz

6

Działa dla mnie, kiedy kopiuję/wklejam twój kod. Spróbuj zastąpić podwójny cudzysłów jednym pojedynczym cudzysłowem lub uciec przed ukośnikiem odwrotnym ("\\u00a0").

+0

W twoim przykładzie to działa, ponieważ używasz wyjścia z js on_encode nie jest faktycznym ciągiem znaków! Jeśli skopiuję wklej mój kod, działa on idealnie nawet dla mnie. – 0plus1

+0

Co stanie się, jeśli zastąpisz '\ xa0' zamiast' \ u00a0'? –

+0

To się dzieje. Usuwa instancje \ u00a0 i po wydrukowaniu z json_encode wygląda dobrze, jednak jeśli echo ciąg bez zakodowania json, otrzymuję , gdzie wcześniej było \ u00a0. W tym momencie nie mogę zrozumieć, co się dzieje. Proszę, daj mi wyjaśnienie! :-) – 0plus1

1

Trzeba to zrobić z apostrofami tak:

str_replace('\u00a0', "",$string); 

Albo, jeśli chcesz używać cudzysłowów, trzeba uciec odwrotny ukośnik - co będzie wyglądać następująco:

str_replace("\\u00a0", "",$string); 
+0

Nadal nie będzie działać – 0plus1

+0

Wpadłem również na ten problem. Oto rozwiązanie, które zadziałało dla mnie. Skopiowałem ciąg znaków ze znanym znakiem \ u00a0 do mojego edytora, a następnie skopiowałem "przestrzeń", którą \ u00a0 reprezentuje i wkleja do funkcji str_replace. Na koniec wygląda to następująco: str_replace ("", "", $ string). Przestrzeń w pierwszym parametrze jest niestandardowym \ u00a0. Teraz uruchom go przez json_encode. –

4

prostu miałem ten sam problem. Wygląda na to, że PHP json_encode zwróci wartość null dla dowolnego ciągu znaków z "non-break space" w nim.

Rozwiązanie ma zastąpić to z regularnym przestrzeni:

str_replace(chr(160),' '); 

Mam nadzieję, że to pomoże ktoś - zajęło mi godzinę do rozszyfrowania.

37

Łącząc ord() z substr() na moim ciąg zawierający \ u00a0, znalazłem następujące przekleństwo pracy:

$text = str_replace(chr(194) . chr(160), ' ', $text); 
+0

Dzięki, ten działa dla mnie. – user11153

+0

Dzięki! to zaoszczędziło mi dużo czasu. '' \ xc2 \ xa0 "' działa również. – elipoultorak

+0

yep pracował dla mnie. Próbuję skasować dane z witryny, która ma francuski tekst. –

0

Ten działa również, znalazłem gdzieś

$str = trim($str, chr(0xC2).chr(0xA0)); 
0

To załatwiło sprawę dla mnie:

$str = preg_replace("~\x{00a0}~siu", " ", $str);