Regex on sentences - php

I built a regex to match sentences in a PHP script, it works great though, it misses the first sentence. Here is the PHP including the regex.
preg_match_all('([A-Z][^\.!?]*[\.!?]\s)', '$data', $arr, PREG_OFFSET_CAPTURE);
The string used for testing.
Persoonsgegevens van 84.000 Bol.com-klanten waren toegankelijk via een
lek in de site van een externe partij waar Bol.com mee samenwerkte.
Het ging om een kwetsbaarheid voor sql-injectie. De gegevens zijn
volgens Bol.com niet misbruikt.
De webwinkel heeft de getroffen klanten uit zichzelf geïnformeerd,
blijkt onder meer uit een topic op GoT. Het gaat om 84.000 klanten die
meededen aan de 'kennismakingsactie' Warm Welkom.
De klantgegevens stonden in een database van een externe partij waar
Bol.com mee samenwerkte voor de actie, zegt Bol.com-directeur Daniel
Ropers tegenover Tweakers.net. Van de klanten konden naam, geslacht,
e-mailadres en geboortedatum worden achterhaald; betaalgegevens waren
niet toegankelijk.
"We hebben gisteravond klanten geïnformeerd die eind vorig jaar hebben
meegedaan aan de marketingactie", zegt Ropers. "Via het bureau dat de
actie heeft verzorgd waren gedurende een bepaalde periode gegevens
toegankelijk." Het lek zou in ieder geval vorig jaar zomer al in de
software hebben gezeten. Sinds februari waren de gegevens versleuteld.
Volgens Webwereld gaat het om een lek in de tool amfphp.
Bol.com ondernam actie nadat het bedrijf werd getipt. Ropers: "Buiten
de tipgever is er niemand bij de data geweest; er is niets uitgelekt.
We zijn de tipgever zeer dankbaar." Hij benadrukt dat Bol.com zelf
niet is gehackt, maar zegt ook dat het bedrijf desondanks zijn
verantwoordelijkheid wil nemen. "Voor alle bedrijven waar we mee
samenwerken hebben we security-checklists. Daar moeten we dus een stap
verder in gaan."
Source: Tweakers.net

I would use this regex to match sentence:
'.*?([\.!?]+|$)'
Add a bit more tweaks here and there gives a better looking output for the test input (test input only - no guarantee for general text):
/[\S].*?(?:[\.!?]+["]?(?=\s)|$)/

Related

PHP Enter in File

I made an easy code in PHP where you have 3 textboxes where you put your name address and living place and it will save in a file called name.txt. Everything works fine, but I want to save it in the format below and not like this (Name Adrress Livingplace):
Name
Address
Living place
Name
etc.
I have tried to but /n into the fputs but it didnt work. Here is my code:
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="utf-8">
<?php
if (!empty($_GET)) { // -----
$naamnieuw = $_GET["naam"]; // Naam word een variable.
$adres = $_GET["adres"];
$woon = $_GET["woon"];
if (file_exists("naam.txt")) { // Checkt of naam.txt bestaat
$fp = fopen("naam.txt", "r+"); // Opent naam.txt om erin te kunne schrijven
// $naam = fgets($fp); // De variable naam leest de naam op uit het bestand naam.txt de variable fp verwijst weer naar fopen naam.txt en dat opent het weer zodat je ernaar kan schrijven.
fclose($fp); // Sluit het bestand
$fp = fopen("naam.txt", "a"); // Hier word variable fp veranderd in het openen van naam.txt maar het maakt het bestand ook als het niet bestaat.
// echo "Jouw naam is dus $naamnieuw"; // Zegt de naam van de textbox.
// if ($naamnieuw != $naam) { // Als de $naam in het bestand niet gelijk is aan de naam nieuw in het textbox dan zegt die dit.
// echo "<br>maar de vorige keer heette je nog $naam";
// }
fputs($fp, $naamnieuw."\n"); // Schrijft de niewenaam naar het bestand
fputs($fp, $adres."\n");
fputs($fp, $woon."\n"."\n");
fclose($fp); // Sluit het bestand
// rewind($fp);
}
// else {
// $fp = fopen("naam.txt", "w"); // Variable fp word nu veranderd in w dat zorgt ervoor dat je er naar kunt schrijven en als er al iets in staat dat het overwirte wordt.
// $naamnieuw = $_GET["naam"]; // De naam in het textbox word een variable.
// fputs($fp, $naamnieuw); // Schrijft de naam naar het bestand.
// fputs($fp, $adres);
// fputs($fp, $woon);
// fclose($fp); // Sluit het bestand
// }
}
?>
</head>
<body>
<form name="naamform" method="get" action="<?php echo $_SERVER["PHP_SELF"]?>">
Naam <input type="text" name="naam"><br>
Adres <input type="text" name="adres"><br>
Woonplaats <input type="text" name="woon">
<br>
<br>
<input type="submit" name="submit" value="opslaan">
</form>
</body>
</html>
fputs($fp, $naamnieuw."\r\n");
fputs($fp, $adres."\r\n");
fputs($fp, $woon."\r\n"."\r\n");
This should do the trick.
I reformatted a bit of your code for readability:
if(!empty($_GET)) {
//Declareer variabeles
$naamnieuw = $_GET["naam"];
$adres = $_GET["adres"];
$woon = $_GET["woon"];
if(file_exists("naam.txt")) {
$fp = fopen("naam.txt", "a");
fputs($fp, $naamnieuw."\r\n");
fputs($fp, $adres."\r\n");
fputs($fp, $woon."\r\n"."\r\n");
fclose($fp);
} else {
$fp = fopen("naam.txt", "w");
$naamnieuw = $_GET["naam"];
fputs($fp, $naamnieuw."\r\n");
fputs($fp, $adres."\r\n");
fputs($fp, $woon."\r\n"."\r\n");
fclose($fp);
}
}
The "\n" in :
fputs($fp, $naamnieuw."\n");
is to be used on linux systems.
For Windows you can use "\r\n".
If you dont want to care about it, you should use :
fputs($fp, $naamnieuw . PHP_EOL);
It's the PHP end of line character :
http://php.net/manual/en/reserved.constants.php

PHP html-Mail empty email

Hy guys,
I'm trying to send a couple of emails through PHP with the default PHP Mail function ( i know that there are libraries, but this is a script i will only run 1 time... )
Here's the code that i'm using (the $leMSG and email sending part are inside an foreach loop ):
$leMSG = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor website.nl</tilte></head><body><p>Beste klant van website.nl,</p><p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p><p>Uw nieuwe gegevens zijn:<br />Email: ' . $leEmail . '<br />Wachtwoord: ' . $password . '</p><p>U kunt uw gegevens hier na lopen en desnoods veranderen.</p><p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p><p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>';
$this -> mailer($leMSG, $item['email'], $item['customer_id']);
And the mailer function:
function mailer($msg, $to, $id){
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers
$headers .= 'To: email#addres.nl\r\n';
$headers .= 'From: Webmaster website.nl <webmaster#website.nl> \r\n';
if(mail('email#addres.nl', 'Uw nieuwe aanmeld gegevens voor website.nl', $msg, $headers)){
return TRUE;
}
else{
echo "<br />ERROR #id_" . $id;
}
}
But the email is empty. When i look at the source ( with GMail ), i can see that there is some HTML:
From: webmaster#website.nl
To:
Date: Thu, 7 Nov 2013 15:43:29 +0100
Subject: Uw nieuwe aanmeld gegevens voor website.nl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor website.nl</tilte></head><body><p>Beste klant van website.nl,</p><p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p><p>Uw nieuwe gegevens zijn:<br />Email: email#addres.nl<br />Wachtwoord: 55jws2tS0j</p><p>U kunt uw gegevens hier na lopen en desnoods veranderen.</p><p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p><p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>
Does anybody knows what's wrong with this script? I don't get any kind of error or something like that...
EDIT, Using now some more newlines for code readability, but that didn't fix it
$leMSG = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor Kadobos.nl</tilte></head>' . PHP_EOL;
$leMSG .= '<body><p>Beste klant van website.nl,</p>' . PHP_EOL;
$leMSG .= '<p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p>' . PHP_EOL;
$leMSG .= '<p>Uw nieuwe gegevens zijn:<br />Email: ' . $leEmail . '<br />Wachtwoord: ' . $password . '</p>' . PHP_EOL;
$leMSG .= '<p>U kunt uw gegevens hier na lopen en desnoods veranderen.</p>' . PHP_EOL;
$leMSG .= '<p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p>' . PHP_EOL;
$leMSG .= '<p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>' . PHP_EOL;
</tilte> is spelled wrong in the head.
Should be </title>
Unclear. Looking at your HTML with carriage returns properly set:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Uw nieuwe aanmeld gegevens voor website.nl</tilte>
</head>
<body>
<p>Beste klant van website.nl,</p>
<p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p>
<p>Uw nieuwe gegevens zijn:<br />Email: ' . $leEmail . '<br />Wachtwoord: ' . $password . '</p>
<p>U kunt uw gegevens hier na lopen en desnoods veranderen.</p>
<p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p>
<p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p>
</body>
</html>
I wonder about this line:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
My gut says it should close itself so it should be; note the / at the end of the line:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
EDIT: Looking at your core code this seems like another issue:
$headers .= 'To: email#addres.nl\r\n';
$headers .= 'From: Webmaster website.nl <webmaster#website.nl> \r\n';
Perhaps try it like this.
$headers .= "To: " . 'email#addres.nl' . "\r\n";
$headers .= 'From: " . 'Webmaster website.nl <webmaster#website.nl>' . "\r\n";
The single versus double quote issue could be adding more lines to the message body & thus have your mail program choke when trying to process the HTML part of the message. Meaning it seems like that the one line space between the headers & the body cause issues. So what looks like this; look at the area between Subject: and the body of the message:
Subject: Uw nieuwe aanmeld gegevens voor website.nl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor website.nl</tilte></head><body><p>Beste klant van website.nl,</p><p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p><p>Uw nieuwe gegevens zijn:<br />Email: email#addres.nl<br />Wachtwoord: 55jws2tS0j</p><p>U kunt uw gegevens hier na lopen en desnoods veranderen.</p><p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p><p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>
Should render like this:
Subject: Uw nieuwe aanmeld gegevens voor website.nl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Uw nieuwe aanmeld gegevens voor website.nl</tilte></head><body><p>Beste klant van website.nl,</p><p>website.nl is overgegaan naar een nieuw systeem en uw account is mee verhuisd. Helaas konden we niet uw oude wachtwoord gebruiken, aangezien die beveiligd was opgeslagen. Daarom waren wij genoodzaakt om uw wachtwoord te resetten.</p><p>Uw nieuwe gegevens zijn:<br />Email: email#addres.nl<br />Wachtwoord: 55jws2tS0j</p><p>U kunt uw gegevens hier na lopen en desnoods veranderen.</p><p>Mochten er nog vragen / opmerkingen zijn, dan horen wij dat graag.</p><p>Met Vriendelijke Groet,<br />Webbeheer website.nl</p></body></html>

How to make Jquery Validation Error Messages Dynamic? [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
jQuery validation in different languages
I am using jquery.validate.js. And I need to show up the error messages in two languages. How can I do this? How can I make the error messages dynamic?
I use this for a dutch website. Just add this to a .js file and include it.
jQuery.extend(jQuery.validator.messages, {
required: "Dit is een verplicht veld.",
remote: "Controleer dit veld.",
email: "Vul hier een geldig email adres in.",
url: "Vul hier een geldige URL in.",
date: "Vul hier een geldige datum in.",
dateISO: "Vul hier een geldige datum in (ISO).",
number: "Vul hier een geldig nummer in.",
digits: "Vul hier alleen nummers in.",
creditcard: "Vul hier een geldig credit card nummer in.",
equalTo: "Vul hier dezelfde waarde in.",
accept: "Vul hier een waarde in met een geldige extensie.",
maxlength: jQuery.validator.format("Vul hier maximaal {0} tekens in."),
minlength: jQuery.validator.format("Vul hier minimaal {0} tekens in."),
rangelength: jQuery.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1} tekens."),
range: jQuery.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1}."),
max: jQuery.validator.format("Vul hier een waarde in kleiner dan of gelijk aan {0}."),
min: jQuery.validator.format("Vul hier een waarde in groter dan of gelijk aan {0}.")
});
To add a custom class use this:
$.validator.addMethod(
'class', function (value, element), 'message'
);

Return value from selfmade library in CodeIgniter is empty

I am having a problem with returning a value from a library back to the controller.
When I echo the return value it shows nothing, but when I echo it in the library instead of returning it does show the whole thing.
This is the controller:
$this->load->library('lib_registration');
$message = $this->lib_registration->create_email($registerData);
echo $message;
This is the library:
<?php
class lib_registration
{
public function create_email($incomingData)
{
$name = $incomingData['name'];
$lastname = $incomingData['lastname'];
$email = $incomingData['email'];
$password = $incomingData['password'];
$this->return_email($name, $lastname, $email, $password);
}
public function return_email($name, $lastname, $email, $password)
{
$emailMessage = '
<p>Beste '.$name.' '.$lastname.'</p>
<p>
Ten eerste heten wij u welkom bij BodyBook. Uw online medische dossier waarin u bepaalt wat er in staat.
Privacy staat bij ons heel hoog en wij respecteren ook de privacy van anderen. Daardoor willen wij u
er gelijk op wijzen dat u zelf beslist wat in uw online dossier komt te staan en wat zichtbaar is voor anderen.
</p>
<p>
Ten tweede heeft u zojuist een account aangemaakt bij BodyBook.
Hieronder staat uw voorlopig wachtwoord om mee in te loggen.
Gelieve dit wachtwoord gelijk te veranderen op het moment dat uw voor het eerst inlogt.
</p>
<p>
Uw wachtwoord = <span style="font-weight:bold; font-size:20px"><strong>'.$password.'</strong></span>
</p>
<p>
Onthoudt dit wachtwoord goed. Dit wachtwoord is beveiligd opgeslagen en kan daarom niet worden opgevraagd.
Mocht u uw wachtwoord vergeten zijn, dan is daar een optie voor tijdens het inloggen.
Mocht u uw wachtwoord willen wijzigen, dan kan dat in uw account instellingen als u bent ingelogd.
</p>
<p>
Wij wensen u veel plezier met BodyBook.
</p>
<p>
Met Vriendelijk Groet,
</p>
<p>
Het BodyBook team.
</p>
';
return $emailMessage;
}
}
?>
I hope you guys can show me what I am doing wrong.
The create_email function needs a return as well. Like this...
public function create_email($incomingData)
{
$name = $incomingData['name'];
$lastname = $incomingData['lastname'];
$email = $incomingData['email'];
$password = $incomingData['password'];
return $this->return_email($name, $lastname, $email, $password); //return here
}

add extra field to form not working

I have a working recommend to script, I just wanted to add a extra field named fename, now I get an error like this:
Parse error: syntax error, unexpected $end in
this is the html form:
<form action="action.php" method="post">
Uw naam:<br />
<input type="text" name="name" size="25"><br />
<br />
Uw e-mail adres:
<br />
<input type="text" name="email" size="25"><br />
<br />
De naam van uw kennis of vriend:
<br />
<input type="text" name="fename" size="25"><br />
<br />
Het e-mail adres van uw vriend of kennis:<br />
<input name="femail" type="text" size="25"><br />
<br />
Bijzonderheden:<br>
<textarea rows="5" name="recon" cols="75">
</textarea><br />
<input type="submit" name="submit" value="Aanbevelen!">
</form>
This is the action.php
<?
if (!$_POST['name']) {echo "Je moet wel je naam invullen a.u.b."; } else {
if (!$_POST['email']) {echo "Je moet wel je e-mail adres invullen a.u.b."; } else {
if (!$_POST['fename']) {echo "Naam van uw vriend of vriendin invullen."; } else {
if (!$_POST['femail']) {echo "Je moet wel het e-mail adres van uw vriend/familie of kennis invullen. a.u.b."; }
else{
$name=$_POST['name'];
$email=$_POST['email'];
$fename=$_POST['fename'];
$femail=$_POST['femail'];
$recon=$_POST['recon'];
$recon=htmlspecialchars($recon);
$headers = "From: $email\r\nReply-To: $femail\r\n";
PRINT "Bedankt $name dat u ons heeft aanbevolen.";
mail("$femail", "Computerhulp is nabij!", "
Beste $name , $fename heeft u ons aanbevolen.
$recon
",$headers);
}
}
}
?>
You need another } since you added another nested if-else.
However, it'd be far better to refactor using elseif's since those are designed exactly for this type of chaining:
<?php
if (!$_POST['name']) {echo "Je moet wel je naam invullen a.u.b."; }
elseif (!$_POST['email']) {echo "Je moet wel je e-mail adres invullen a.u.b."; }
elseif (!$_POST['fename']) {echo "Naam van uw vriend of vriendin invullen."; }
elseif (!$_POST['femail']) {echo "Je moet wel het e-mail adres van uw vriend/familie of kennis invullen. a.u.b."; }
else {
$name=$_POST['name'];
$email=$_POST['email'];
$fename=$_POST['fename'];
$femail=$_POST['femail'];
$recon=$_POST['recon'];
$recon=htmlspecialchars($recon);
$headers = "From: $email\r\nReply-To: $femail\r\n";
PRINT "Bedankt $name dat u ons heeft aanbevolen.";
mail("$femail", "Computerhulp is nabij!", "
Beste $name , $fename heeft u ons aanbevolen.
$recon
",$headers);
}
?>
When you write a code, keep the block minimum. If you using the IDE, then it will tell you when you missed a }. Use a consistent bracket style and indentation to help you spot a bug.
Here is your code above but will be more readable and easier to find the bug:
<?php
$error = 0;
if (!$_POST['name']) {
echo "Je moet wel je naam invullen a.u.b.";
$error = 1;
}
if (!$_POST['email']) {
echo "Je moet wel je e-mail adres invullen a.u.b.";
$error = 1;
}
if (!$_POST['fename']) {
echo "Naam van uw vriend of vriendin invullen.";
$error = 1;
}
if (!$_POST['femail']) {
echo "Je moet wel het e-mail adres van uw vriend/familie of kennis invullen. a.u.b.";
$error = 1;
}
if ( $error == 0 ) {
$name=$_POST['name'];
$email=$_POST['email'];
$fename=$_POST['fename'];
$femail=$_POST['femail'];
$recon=$_POST['recon'];
$recon=htmlspecialchars($recon);
$headers = "From: $email\r\nReply-To: $femail\r\n";
PRINT "Bedankt $name dat u ons heeft aanbevolen.";
mail("$femail", "Computerhulp is nabij!", "
Beste $name , $fename heeft u ons aanbevolen.
$recon
",$headers);
}
See how I use $error to prevent nested if-else.

Categories