Ik ben bezig met een functie die een string inkort vanaf de eerste 'end_of_line' (als die al voorkomt). Die functie wil ik gaan gebruiken bij het uitlezen van een formulier, om spam-misbruik tegen te gaan. Na een 'end_of_line' kunnen immers extra headers (Cc: en Bcc: ) toegevoegd worden.

Ik heb dit al en het werkt:
<?php
function clear_invoer($tekst) {
	list($tekst) = preg_split("/\n|\r/",$tekst);
	return $tekst;
}
?>

Mijn vragen:
1. Is dit voldoende of zie ik nog iets over het hoofd?
2. Kan het ook anders? Misschien doe ik veel te ingewikkeld?
dit gaat niet werken, aangezien een cc of bcc niet verplicht op een volgende regel moet.

Kijk even hier in de scriptlib, daar staat wel een script om een e-mail adres te controleren
In vrijwel alles wat ik er over gelezen heb staat dat je al een heel eind komt met het controleren op \n en \r.

In de tutorial van Pholeron http://www.phphulp.nl/php/tutorials/10/340/ worden \n en \r weggehaald, maar eventuele Cc: en Bcc: blijven gewoon staan.

Verder gaat het me niet om een e-mailcheck, maar dat moet inderdaad ook gebeuren.
in tegenstelling tot wat PHP Newbie zegt heeft elke header heeft een eigen regel nodig. Een wel bestaand probleem is meerdere mails:

[email protected], [email protected]

dus gewoon whitespace strippen
Meerdere e-mails in een string wilde ik met een regex aanpakken, dus dat komt wel goed.
Je gaat dus voor alle formulier waardes die maar uit 1 regel kunnen bestaan deze functie er over heen halen? of alleen voor email adressen?

Zelf doe ik dit niet het eerste wat ik doe is \r\n en \r vervangen door 2 keer en \n. Daarna controleerd ik de waardes met een regex. Alleen moet je dus geen s modifier in je regex hebben andere worden de enters als nog gematched.

Misschien is die manier van jou nog wel veiliger, omdat je dan tenmiste weet dat je maar 1 regel tepakken hebt.

edit:

Misschien dat dit makkelijker is:

<?php
$sData = 'regel1
regel2';

$sResultaat = ( preg_match('/^[^\r\n]+/', $sData, $aMatch) ? $aMatch[0] : null );
unset($aMatch);

echo $sResultaat;
?>

Maakt ook niets uit...
Nee, het is niet voor alle form-waardes.

De mail()-functie heeft (zoals je weet) vier parameters. Het lijkt mij essentieel dat $mailto, $subject en de regels in $headers geen extra 'end_of_line' bevatten. Dus als die uit het formulier moeten komen, dan gaan ze eerst door de functie.

In $message mag natuurlijk best een 'end_of_line' zitten. Als daarin na een 'end_of_line' Bcc: (enz.) staat kan dat geen kwaad.
Dankje voor de uitleg.

Ik denk dat ik zelf niet met de mail functie aan de slag ga. Phpmailer gebruiken is net zo makkelijk.

Reageren