Ik geef leden van mijn website de mogelijkheid een soort nieuwsbrief in te sturen in Word.
Deze worden getoond via een embedded google docs.
Nu wil ik vooraf automatisch de inhoud van de tekst controleten op bijv. verboden linkjes.
Kan dit in PHP?
Ik kan natuurlijk wel een filter erbij zetten.
En als het een false positive geeft kan men de webbeheerder vragen.
Dan kan het document inderdaad door de webbeheerder alsnog geplaatst worden.
Zijn nooit documenten waar veel haast mee is.
?
Onbekende gebruiker
11-04-2016 17:32
De mogelijkheden zijn eindeloos.
Je kunt het ook omkeren: woorden whitelisten, omdat mensen ook gewoon k1ootzak (met cijfer 1 als kleine letter L) kunnen typen. Je kunt via http://www.opentaal.org beginnen met een basiswoordenlijst, en alleen woorden die niet bekend zijn er uit laten springen door het filter. Dan hoeft een moderator maar éénmalig veilige woorden toe te voegen via een "toestaan"- en "verbannen"-knop.
Dit heb ik er voorlopig van gebakken.
Denk dat ik in een tabel inderdaad de schuttingwoorden ga opslaan (en eventueel variaties). Dan kan ik via administratiepaneel woorden toevoegen.
Zal allemaal best mooier en beter uitgeschreven kunnen worden.
Dus kom gerust met veranderingen en verbeteringen.
Ik gebruik nu de XML string na enige filtering met tags om het woord "Hyperlink" te vinden.
Dat was nodig omdat WORD een gewone link (www.site.nl) anders interpreteert in XML dan een gemaakte link van een zin of woord.
Daarna gaan alle tags eruit.
En wordt de string gecontroleerd op scheldwoorden.
Komt er een link en/of scheldwoord voor dan kan het document niet geupload worden.
Zit een een verkeerde positief in, dan kan men contact opnemen met de webbeheerder.
Als je de complete XML bewaart, dan is het in principe mogelijk om woorden en linkjes te vervangen door bijv. "***". En daarna de omgekeerde weg te bewandelen om het weer terug in de zip te zetten.
<?
$document = 'test.docx';
$c = strtolower(extracttext($document));
$d = woordfilter($c);
$e = linkfilter($d);
echo $e."<br>";
$f = strip_tags($c);
$h = scheldfilter($f);
echo $h;
function scheldfilter($f)
{
$schelden = array ('kat', 'hond', 'eend');
$sc = count($schelden);
$x = 0;
while ($x < $sc)
{
$sch = $schelden[$x];
$sche = strpos($f, $sch);
if ($sche >-1)
{
return "Scheldwoord(en) gevonden <br>";
}
$x ++;
}
}
function woordfilter($c)
{
$filter = array("openxmlformats", "<?xml version","</w:document>",
"http://schemas.microsoft.com/office/word/2006/wordml","http://schemas.openxmlformats.org/officeDocument/2006/");
$text = str_replace($filter,"", $c);
return $text;
}
function linkfilter($d)
{
if(strstr($d, 'hyperlink')){
return "Linkje(s) gevonden <br>";
}
else
{return "oke";}
}
/**Function to extract text*/
function extracttext($filename) {
//Check for extension
$ext = end(explode('.', $filename));
//if its docx file
if($ext == 'docx')
$dataFile = "word/document.xml";
//else it must be odt file
else
$dataFile = "content.xml";
echo $datafile;
//Create a new ZIP archive object
$zip = new ZipArchive;
// Open the archive file
if (true === $zip->open($filename)) {
// If successful, search for the data file in the archive
if (($index = $zip->locateName($dataFile)) !== false) {
// Index found! Now read it to a string
$text = $zip->getFromIndex($index);
// Load XML from a string
// Ignore errors and warnings
$xml = DOMDocument::loadXML($text, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
// Remove XML formatting tags and return the text
return $xml->saveXML();
//return $xml->saveXML();
}
//Close the archive file
$zip->close();
}
// In case of failure return a message
return "File not found";
}
?>