Kjapp og trygg hosting for Wordpress

Problemer med et regulært uttrykk

RAH

Medlem
Hei,

Jeg krangler med et uttryk og søker derfor hjelp til å finne feilen.

Kodesnutten brukes sammen med innkommende SMS.

Jeg skal fjerne spesialtegn som f.eks. ',".!? fra et kodeord (command). Kodeordet skal kunne inneholde a-z A-Z 0-9 æøå ÆØÅ.

Command fra url: localhost/din-url/?command=%d8ks

Problemet: ø i øks blir fjernet.


Ser dere noe som jeg ikke ser?

På forhånd takk for hjelp :)


PHP:
$get = "";

if(isset($_GET['command'])) { 
	$get = urldecode($_GET['command'])." "; 
}

$msg = $get.", en helt vanlig melding.";

$command = explode(" ",$msg);
$command = $command[0];
$commandBefore = $command;


$pattern = "/[^A-Za-z0-9æøåÆØÅ]/";
$command = preg_replace($pattern, "", $command);

echo "Before: $commandBefore<br/>After: ".$command;
 

drlinux

Konsulent i PHP og Linux
Legg til modifier u for unicode karakterer. Dette fungeret for meg;

PHP:
$command = 'ko22--deØÆÅ';
$pattern = "/\W/u";
$command = preg_replace($pattern, "", $command);

echo $command . "\n";

Dette skriver ut ko22deØÆÅ

\W matcher alt som ikke er "word characters".
 

drlinux

Konsulent i PHP og Linux
Det kommer vel an på hva inndata var, men kan være tegnkoding (en evig pest og plage ;) ).

Mine data var i UTF8, men du kan jo prøve preg_replace($pattern, "", utf8_encode($command));

Eksempelet over fungerte for meg, så prøv med dette i et testskript, og test deretter med egne data når du har fått det til å fungere.
 
Topp