WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   ta bort konstigt tecken från text [php] (https://www.wn.se/forum/showthread.php?t=1042776)

radioaktivitet 2010-07-04 11:41

ta bort konstigt tecken från text [php]
 
Denna text innehåller ett konstigt tecken. Mellan bokstaven a och b så ser det ut som om det bara är ett vanligt mellanrum. Men det är ytterligare ett tecken innan b, som inte syns för ögat. Hur gör jag för att ta reda på vilket tecken det är så att jag kan ta bort det med hjälp av php?

----
a b
----

Tack för hjälpen!

radioaktivitet 2010-07-04 12:00

Jag kan ju nämna att jag redan försökt detta, utan att det hjälpte:

$text = iconv("UTF-8","UTF-8//IGNORE",$text);

Anledningen att jag måste få bort tecknet är att det återfinns i ett av mig genererat RSS-flöde. Och flödet valideras inte just pga detta tecken. Får 'not well-formed (invalid token)' från validatorn.

BjörnJ 2010-07-04 12:03

Ett alternativ är att göra något i stil med det här:
PHP-kod:

$str=preg_replace('/[^-_a-zA-Z0-9]/','',$str); 

Om du vet vilka tecken du vill tillåta. Den tar bort alla tecken utom de angivna.

radioaktivitet 2010-07-04 12:20

Citat:

Ursprungligen postat av BjörnJ (Inlägg 20361399)
Om du vet vilka tecken du vill tillåta. Den tar bort alla tecken utom de angivna.

Tyvärr vet jag inte vilka tecken jag vill tillåta... Texterna kommer från lite olika håll. Risken är att jag missar att speca ett tecken, som jag borde tillåtit. Så jag föredrar att göra tvärtom - dvs ta bort tecken som jag inte vill tillåta.

nosnaj 2010-07-04 12:40

Kika vilket hexvärdet är för tecknet så kan du ta bort det sedan. Alternativt ber du om att få en rss som inte har teckenkodningproblem eftersom fler säker lär få samma problem annars.

radioaktivitet 2010-07-04 12:45

Hur kollar jag hexvärdet? Jag klistrade in texten här på WN, och tecknet följde med. Men hur går jag vidare?

nosnaj 2010-07-04 13:07

Du kan använda diverse verktyg, tecknet du efterfrågar har hexvärde 3 och är tecken ETX (end of text)

tartareandesire 2010-07-04 14:39

Jag rekommenderar att du löser ursprungsproblemet istället. De alternativ du har annars är att ersätta specifika tecken eller rensa bort allt utom specifika tecken. Inget av dessa alternativ är optimalt utan det bästa är att lösa det bakomliggande problemet, dvs. se efter varifrån tecknet härrör.

radioaktivitet 2010-07-04 23:22

Citat:

Ursprungligen postat av nosnaj (Inlägg 20361407)
Du kan använda diverse verktyg, tecknet du efterfrågar har hexvärde 3 och är tecken ETX (end of text)

Tack! Men hur gör jag för att ta bort det från texten?

forngren 2010-07-04 23:58

En enkel str_replace borde lösa det hela. Typ:

<?php
$string = str_replace('', '', $string);
?>

Alex 2010-07-05 00:03

http://en.wikipedia.org/wiki/Byte_order_mark

http://blog.philipp-michels.de/?p=32

Testa öppna koden som genererar RSS-flödet i en editor och kolla om du hittar "Include BOM", vanligtvis en checkbox. Kryssa ur och spara om.

Ctrl+J -> Title/Encoding i Dreamweaver.

radioaktivitet 2010-07-05 00:16

Citat:

Ursprungligen postat av Alex (Inlägg 20361445)
http://en.wikipedia.org/wiki/Byte_order_mark

http://blog.philipp-michels.de/?p=32

Testa öppna koden som genererar RSS-flödet i en editor och kolla om du hittar "Include BOM", vanligtvis en checkbox. Kryssa ur och spara om.

Ctrl+J -> Title/Encoding i Dreamweaver.

Nu blir jag lite osäker här. Är det BOM eller ETX (som tidigare föreslagits)? Koden i bloggen tar endast bort BOM om det är i början av en text. Mitt tecken ligger mitt i texten. str_replace borde ju fungera - problemet är att jag inte vet vad jag skall skriva som första argument till funktionen...

Jag inte fixa det i en texteditor. Texterna (för det är ganska många) ligger i en databas. Att plocka ut dem manuellt och gå in och ändra tar helt enkelt för mycket tid. PHP to the rescue?

Uppdaterat: Enligt http://www.sunfinedata.com/tips/remo...m-utf-8-files/ skriver validatorn ut "Byte-Order Mark found in UTF-8 File." om det är det som är felet. Detta meddelande fick inte jag när jag gjorde valideringen. Så förmodligen är det väl då inte BOM?

radioaktivitet 2010-07-05 09:50

Problemet löst!

$body = preg_replace('/[\x00-\x1F\x7F]/', '', $body);


Alla tider är GMT +2. Klockan är nu 18:24.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson