Russische karakters detecteren
Ik probeer Russische karakters in een formulier inzending te vinden. Maar het lukt me niet om dit voor elkaar te krijgen:
Ik heb een eenvoudig voorbeeld geschreven, maar zelfs dan blijft uitkomst "Geen Russisch". Enig idee waarom?
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$my_form_value = "";
$banned_words = "";
$words = explode(',', $banned_words);
foreach ($words as $word) {
if ( preg_match("/\b".$word."\b/i", $my_form_value) ) {
echo "Wel Russisch";
} else {
echo "Geen Russisch";
}
}
$banned_words = "";
$words = explode(',', $banned_words);
foreach ($words as $word) {
if ( preg_match("/\b".$word."\b/i", $my_form_value) ) {
echo "Wel Russisch";
} else {
echo "Geen Russisch";
}
}
Update: ik zie dat Russische karakters niet doorkomen, maar mijn variabelen waren iets zoals:
Gewijzigd op 11/02/2024 18:17:44 door Guido -
Wel ? = ?
b = ?
en c = s in het Russisch.
Hou er ook rekening meer dat het Russische alfabet double-byte is.
????? ??????????, ???????.
Toevoeging op 11/02/2024 20:57:38:
Haha, dit moderne forum snapt geen buitenlands.
Die abc was een voorbeeld, omdat Russische karakters niet getoond worden hier. Vul hetzelfde willekeurige Russisch woord of letter in bij beide variabelen, dan zul je zien dat mijn code niet werkt. Met abc werkt het natuurlijk wel.
Guido
Misschien met mb_ereg_match?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$my_form_value = "???";
$banned_words = "???,??????";
$words = explode(',', $banned_words);
echo '<pre>' . print_r( $words, TRUE ) . '</pre>';
foreach ( $words as $word ):
$pattern = "\b" . $word . "\b";
echo '<pre>' . $pattern . '</pre>';
if ( mb_ereg( $pattern , $my_form_value ) ):
echo "Wel Russisch";
else:
echo "Geen Russisch";
endif;
endforeach;
?>
$my_form_value = "???";
$banned_words = "???,??????";
$words = explode(',', $banned_words);
echo '<pre>' . print_r( $words, TRUE ) . '</pre>';
foreach ( $words as $word ):
$pattern = "\b" . $word . "\b";
echo '<pre>' . $pattern . '</pre>';
if ( mb_ereg( $pattern , $my_form_value ) ):
echo "Wel Russisch";
else:
echo "Geen Russisch";
endif;
endforeach;
?>
Toevoeging op 11/02/2024 22:45:10:
En hiermee ook
Guido
Russische taal of het Cyrillisch alfabet herkennen?
Of gaat het je, vanwege de $banned_words, vooral om specifieke scheldwoorden en andere beladen termen?
Wil je de Of gaat het je, vanwege de $banned_words, vooral om specifieke scheldwoorden en andere beladen termen?
Ik moest van de voornaam en achternaam de eerste letter hebben.
Met een RUS letter lukte dat niet
Code (php)
1
substr( $first_name, 0, 2 ) . $last_name; // first 2 characters because of multibyte characters
En later iets in mysql .
en
geven verschillende lengtes in multibytes.
Toevoeging op 12/02/2024 08:29:23:
In aansluiting op Ward van der Put
https://stackoverflow.com/questions/3212266/detecting-russian-characters-on-a-form-in-php
https://browse-tutorials.com/snippet/check-if-text-contains-cyrillic-characters-php
Gewijzigd op 12/02/2024 08:06:07 door Adoptive Solution
Quote:
Of gaat het je, vanwege de $banned_words, vooral om specifieke scheldwoorden en andere beladen termen?
Klopt, om specifieke woorden.
Quote:
Met deze code lukt het
Ik merk trouwens dat detecteren beter gaat met mb_ereg ipv mb_ereg_match. Niet helder waarom.
Guido
Adoptive Solution op 11/02/2024 20:57:05:
Haha, dit moderne forum snapt geen buitenlands.
Haha, dit moderne forum snapt geen buitenlands.
Ik kan 'm wel eens Russisch, Chinees en weet-ik-veel-wat-nog-meer leren, maar dan moet ik eerst even een mooie testomgeving fixxen voor mijzelf. Maar ik ga er zeker naar kijken. UTF-8 is hier best ruk inderdaad.
Gewijzigd op 12/02/2024 09:13:16 door - Ariën -
tutorial over Unicode al hebt doorgewerkt, weet je dat je voor het herkennen van bepaalde Russische woorden niet hoeft te weten of tekst Russische tekens bevat. Je kunt woorden ook direct vergelijken met Russische woorden uit een Unicode woordenboek.
Doe dat dan wel nadat je de Unicode strings en woorden hebt genormaliseerd, bij voorkeur met Intl::Normalizer.
Of laat het je database doen. Met 1 query scheelt het weer een hoop PHP-code.
Aannemende dat je de Doe dat dan wel nadat je de Unicode strings en woorden hebt genormaliseerd, bij voorkeur met Intl::Normalizer.
Of laat het je database doen. Met 1 query scheelt het weer een hoop PHP-code.
[\x{0400}-\x{04FF}]
Gewijzigd op 12/02/2024 12:37:47 door - Ariën -
hier.
Ik gebruikte dus preg_match() totdat ik er achter kwam dat het niet werkte met Russische (Cyrillische) woorden. Maar hetzelfde voor bepaalde Poolse woorden, etc. Maar wanneer ik mb_ereg() gebruik werkt het wel naar behoren. Dus het eerste voorbeeld van Adoptive Solution Dan zou puur herkenning van 1 karakter niet voldoende zijn.
Ik noem Russisch, want daar liep ik tegen aan. Maar ik wil eigenlijk specifieke woorden kunnen detecteren in elke taal. Met mb_ereg() lijk ik een eind te komen..
Guido
Gewijzigd op 15/02/2024 16:37:31 door Guido -