Voor het maximaal toegestane aantal getypte karakters in een textarea gebruik ik een counter die het aantal getypte karakters weergeeft en de waarde van die counter stuur ik via ajax naar een php file die dit serverside checkt.

Dit is de funcite van de counter:

// counting characters textarea
function CountCharacters() {
	var body = tinymce.activeEditor.getBody();
	var content = tinymce.trim(body.innerText || body.textContent);
	return content.length;
};


In de ajax stuur ik hem op deze manier naar de php file:


// count chars input
var countchars = CountCharacters();
$.ajax({
	url: 'comment.php',
	type: 'POST',
	data: {
               .......
               countchars:countchars
              }

De check in php:

<?php
$countchars = $_POST['countchars']; // countchars
$max_chars_allowed = 200;
if( $countchars > $max_chars_allowed ) {
    echo 'maximale toegestane aantal karakters overschreden';
    ......
?>

Mijn vraag is nu: is het mogelijk dat iemand (via de browserinspector) de waarde van de javascript var var countchars kan manipuleren zodat ajax een ander aantal karkaters naar de php file stuurt dan dat er in werkelijkheid getypt is in de textarea? en zodoende dus een comment kan plaatsen dat boven het toegestane aantal karakters ligt?
Jack Maessen op 27/06/2020 22:52:44

ik ben bang dat het verschil het gevolg is van de tinymce textarea die ik gebruik. Geen idee hoe ik ze synchroon krijg...

Door een textarea zonder tinymce te gebruiken?
Kan je de text niet in een console.log() opvangen? En dan vergelijken met die uit PHP.
Ik gbruik nu deze, die komt het meest in de buurt van js length:

$count_chars_comment = mb_strlen(strip_tags(trim(preg_replace("/&#?[a-z0-9]+;/i"," ",$_POST['comment']))), 'UTF-8');

Het probleem zit hem nie tin plain text. 2000 karakters gekopieerd en geplakt geven allebei 2000 karakters aan. Maar als ik de emoticons van de tinymce ga gebruiken, of bold lines maak, underlines en italic teksten, dan gaat er een verschil optreden

Tja, als een politeman een lasergun op je richt en zegt dat ie 55 aflas op zijn apparaat en jouw snelheidsmeter geeft 50 aan, heb je hetzelfde probleem. Twee verschillende meetinstrumenten. Altijd misère... :)
Je kan je wel staren op het aantal, maar het verschil van de werkelijke string lijkt mij juist interessanter.
Okay. Er kan in ieder geval een verschil zijn tussen de lengte van de zichtbare, leesbare tekst en de (onzichtbare) opmaak(regels) die tinyMCE hier vervolgens aan toevoegt. Maar het zou niet nodig hoeven zijn om hier allemaal reguliere expressies op los te laten. En als je dan een controle hierop aan beide zijden op verschillende wijzen implementeert dan is het natuurlijk niet zo verwonderlijk dat de waarden afwijken.

Laten we hier eens anders naar kijken.

Wat is op dit moment de reden om de invoer te limiteren? Heeft dit echt te maken met fysieke beperkingen zoals bijvoorbeeld opslagruimte in een tabelkolom, of heeft dit een andere reden? Als er in wezen niet zo'n limitering is, dan zou je de textuele delen als *indicatie* kunnen nemen voor de lengte?
Nee ik gebruik dit script niet voor mezelf. Dit is een blogsystem dat ik op Github wil plaatsen. Maar als de gebruiker een limitet op de input wil zetten, wil ik hem daartoe de mogelijkheid geven
Jammer dat je nog geen antwoord op mijn vraag geeft. Maar zowel client-side als serverside moet je gewoon het aantal karakters controleren. Een serversidecheck is ook niet iets waar je op hoeft te besparen, want dit is toch een onwaarneembare nanoseconde of wat.....

Als het aantal ergens mank loopt, dient te worden uitgezocht waar het verschil in zit.

Reageren