C'è un modo per rilevare la lingua dei dati immessi tramite il campo di input?PHP: Come posso rilevare se una stringa di input è araba
risposta
hmm io possa offrire una versione migliorata della funzione di DimaKrasun:
functoin is_arabic($string) {
if($string === 'arabic') {
return true;
}
return false;
}
va bene, abbastanza scherzando!
Il suggerimento di Pekkas di utilizzare google translate api è buono! ma ti stai affidando a un servizio esterno che è sempre più complicato, ecc.
penso che Rushyos sia adatto! non è così facile. ho scritto la seguente funzione per voi, ma la sua non testato, ma dovrebbe funzionare ...
<?
function uniord($u) {
// i just copied this function fron the php.net comments, but it should work fine!
$k = mb_convert_encoding($u, 'UCS-2LE', 'UTF-8');
$k1 = ord(substr($k, 0, 1));
$k2 = ord(substr($k, 1, 1));
return $k2 * 256 + $k1;
}
function is_arabic($str) {
if(mb_detect_encoding($str) !== 'UTF-8') {
$str = mb_convert_encoding($str,mb_detect_encoding($str),'UTF-8');
}
/*
$str = str_split($str); <- this function is not mb safe, it splits by bytes, not characters. we cannot use it
$str = preg_split('//u',$str); <- this function woulrd probably work fine but there was a bug reported in some php version so it pslits by bytes and not chars as well
*/
preg_match_all('/.|\n/u', $str, $matches);
$chars = $matches[0];
$arabic_count = 0;
$latin_count = 0;
$total_count = 0;
foreach($chars as $char) {
//$pos = ord($char); we cant use that, its not binary safe
$pos = uniord($char);
echo $char ." --> ".$pos.PHP_EOL;
if($pos >= 1536 && $pos <= 1791) {
$arabic_count++;
} else if($pos > 123 && $pos < 123) {
$latin_count++;
}
$total_count++;
}
if(($arabic_count/$total_count) > 0.6) {
// 60% arabic chars, its probably arabic
return true;
}
return false;
}
$arabic = is_arabic('عربية إخبارية تعمل على مدار اليوم. يمكنك مشاهدة بث القناة من خلال الموقع');
var_dump($arabic);
?>
pensieri finali: come vedete ho aggiunto ad esempio un contatore latino, la gamma è solo un manichino serie b in questo modo è possibile rilevare charset (ebraico, latino, arabo, hindi, cinese, ecc ...)
si potrebbe anche voler eliminare alcuni caratteri prima ... forse @, spazio, interruzioni di riga, barre, ecc. .. il flag PREG_SPLIT_NO_EMPTY per la funzione preg_split sarebbe utile ma a causa del bug non l'ho usato qui.
si può anche avere un contatore per tutti i set di caratteri e vedere uno che, naturalmente, il più ...
e, infine, si dovrebbe prendere in considerazione tagliare la stringa dopo 200 caratteri o qualcosa del genere. questo dovrebbe essere sufficiente per dire quale set di caratteri è usato.
e devi fare un po 'di gestione degli errori! come divisione per zero, stringa vuota ecc ecc! non dimenticarlo per favore ... qualche domanda? commento!
se si desidera rilevare la LANGUAGE di una stringa, è necessario dividere in parole e verificare le parole in alcune tabelle predefinite. non hai bisogno di un dizionario completo, solo le parole più comuni e dovrebbe funzionare bene. anche la tokenizzazione/normalizzazione è un must! ci sono librerie per che comunque e questo non è quello che hai chiesto :) voleva solo parlare del fatto che
La tua funzione sta facendo perdere la testa. Proverò a implementarlo quando sono di umore migliore e ti faccio sapere se ha funzionato. Ma da quello che ho letto, sembra promettente. – HyderA
roger che, non dimenticare di includere la funzione unord esterna in alto! fammi sapere se hai bisogno di una sola battuta –
Il dizionario è un'ottima idea, il solo problema è che al di fuori dello script latino si incontrano rapidamente circostanze in cui il contesto esterno cambia caratteri, come i caratteri multi-glifo. Dovresti stare attento a evitare i caratteri sensibili al contesto nel tuo dizionario. – Rushyo
Non sono a conoscenza di una soluzione PHP per questo, no.
Il Google Translate Ajax APIs potrebbe essere per voi, però.
Partenza questo frammento JavaScript dalla documentazione API: Example: Language Detection
È possibile utilizzare la funzione, che ho scritto per te:
<?php
/**
* Return`s true if string contains only arabic letters.
*
* @param string $string
* @return bool
*/
function is_arabic($string)
{
return (preg_match("/^\p{Arabic}/i", $string) > 0);
}
Ma per favore, controllare, prima dell'uso.
[EDIT 1]
tua domanda: "Come faccio a rilevare se una stringa di input è l'arabo" E ho risposto ad esso, cosa c'è di sbagliato?
[EDIT 2]
Leggi questo - Detect language from string in PHP
[EDIT 3]
Excuse, riscrivo funzione per questo, provare:
function is_arabic($subject)
{
return (preg_match("/^[\x0600-\x06FF]/i", $subject) > 0);
}
"Is Arabic"! = "Contains 'Arabic'" - il titolo della domanda potrebbe essere un po 'vago, ma il corpo della domanda è più che chiaro, no? – Piskvor
Se lo spago è arabo, contiene lettere arabe o no? –
Piskvor, la RegEx di DimaKrasun dovrebbe effettivamente rilevare i caratteri arabi ... non solo la stringa "arabo". – Rushyo
Presumo che tu ti stia riferendo a una stringa Unicode ... nel qual caso, cerca il pr esence di qualsiasi carattere con un codice tra U + 0600-U + 06FF (1536-1791) nella stringa.
Inclusive, per chiarezza. – Rushyo
la prima cosa che ho pensato di regex con U + 0600-U + 06FF, ma successivamente era di usare \ p {Arabic} - in regex, credo che \ p {Arabic} sia lo stesso con U + 0600-U + 06FF, ma non l'ho provato –
Sono abbastanza sicuro che sia lo stesso, ma questo metodo è molto più veloce. – Rushyo
questo controllerà se la stringa è l'arabo o ha testo arabo
testo deve essere UNICODE ad esempio UTF-8
$str = "بسم الله";
if (preg_match('/[أ-ي]/ui', $str)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
Ha funzionato perfettamente. Grazie mille! – wpcoder
public static function isArabic($string){
if(preg_match('/\p{Arabic}/u', $string))
return true;
return false;
}
Questa funzione verifica se la linea/frase entrato è l'arabo o meno. L'ho ritagliato prima, poi controllo parola per parola calcolando il conteggio totale per entrambi.
function isArabic($string){
// Initializing count variables with zero
$arabicCount = 0;
$englishCount = 0;
// Getting the cleanest String without any number or Brackets or Hyphen
$noNumbers = preg_replace('/[0-9]+/', '', $string);
$noBracketsHyphen = array('(', ')', '-');
$clean = trim(str_replace($noBracketsHyphen , '', $noNumbers));
// After Getting the clean string, splitting it by space to get the total entered words
$array = explode(" ", $clean); // $array contain the words that was entered by the user
for ($i=0; $i <= count($array) ; $i++) {
// Checking either word is Arabic or not
$checkLang = preg_match('/\p{Arabic}/u', $array[$i]);
if($checkLang == 1){
++$arabicCount;
} else{
++$englishCount;
}
}
if($arabicCount >= $englishCount){
// Return 1 means TRUE i-e Arabic
return 1;
} else{
// Return 0 means FALSE i-e English
return 0;
}
}
Il PHP Text_LanguageDetect library è in grado di rilevare 52 lingue. È testato per unità e installabile tramite compositore e PEAR.
- 1. Come posso sapere se una determinata stringa è un input valido per preg_match di PHP?
- 2. Come rilevare se un controllo di input HTML5 è supportato?
- 3. Come posso rilevare se l'utente è su localhost in PHP?
- 4. come rilevare se la variabile è una stringa
- 5. Come determinare una stringa inglese o araba?
- 6. Retromarcia di una stringa araba in C++
- 7. Come posso rilevare se Dispatcher.DisableProcessing è attivo?
- 8. Come posso rilevare "_" in una stringa C++?
- 9. Gestisce la stringa araba in PHP con Eclipse
- 10. rilevare se una variabile PHP è un riferimento/riferimento
- 11. Stampa stringa araba in java
- 12. Come rilevare se l'oggetto è attraversabile in PHP?
- 13. Rilevare se una NSString contiene ...?
- 14. Come posso analizzare una stringa di data araba Umm Al-Qura in un oggetto DateTime .NET?
- 15. Come rilevare se $ _POST è impostato?
- 16. Come rilevare se uno script PHP è già in esecuzione?
- 17. Rilevare se IME (Input Method Editor) è attivo in Silverlight
- 18. Come rilevare se un utente si è disconnesso, in php?
- 19. Come verificare se una stringa è bilanciata?
- 20. Come posso verificare se una stringa è un float?
- 21. Come rilevare se un utente lascia una pagina in PHP
- 22. Controlla se una stringa è un indirizzo email in PHP
- 23. Come rilevare se una stringa contiene caratteri speciali?
- 24. Come rilevare se una stringa contiene almeno un numero?
- 25. Come posso rilevare se la telecamera è limitata dall'utente
- 26. Come posso rilevare se il volume è disattivato?
- 27. come posso rilevare se window.location non è riuscito?
- 28. Come posso rilevare se un utente è lontano dalla tastiera?
- 29. Come posso rilevare le parole che ridono in una stringa?
- 30. Come posso rilevare se esiste una variabile nella sessione Flask?
Suppongo che intendessi la scrittura araba, piuttosto che la lingua araba? C'è una grande differenza. – Rushyo
cosa succede se la stringa contiene parole da più lingue? esempio: 私 not عرب – Lukman