Есть ли способ определить язык ввода данных через поле ввода?PHP: Как определить, является ли входная строка арабской?
ответ
хмм я могу предложить улучшенную версию функции DimaKrasun в:
functoin is_arabic($string) {
if($string === 'arabic') {
return true;
}
return false;
}
хорошо, достаточно шутит!
Pekkas предложение использовать перевод google api является хорошим! но вы полагаетесь на внешнюю услугу, которая всегда более сложна и т. д.
Я думаю, что Rushyos approch хорошо! его просто не так просто. я написал следующую функцию для вас, но его не проверяли, но он должен работать ...
<?
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);
?>
заключительных мыслей: , как вы видите, я добавил, например, латинскую счетчик, диапазон просто фиктивный номер б Таким образом, вы можете обнаружить кодировки (иврит, латинский, арабский, хинди, китайский и т. д.).
Вы также можете устранить некоторые символы сначала ... возможно @, пробел, разрывы строк, косые черты и т. д. .. флаг PREG_SPLIT_NO_EMPTY для функции preg_split будет полезен, но из-за ошибки я не использовал его здесь.
вы также можете иметь счетчик для всех наборов символов и посмотреть, что один, конечно, самый ...
и, наконец, вы должны рассмотреть возможность прерывать вашу строку от после 200 символов или что-то. этого должно быть достаточно, чтобы указать, какой набор символов используется.
и вы должны сделать некоторые ошибки обработки! как деление на ноль, пустую строку и т. д. и т.д.! не забывайте, что пожалуйста ... любые вопросы? комментарий!
Если вы хотите обнаружить ЯЗЫК строки, вы должны разделить на слова и проверить слова в некоторых заранее определенных таблицах. вам не нужен полный словарь, просто самые распространенные слова, и он должен работать нормально. токвизиция/нормализация тоже обязательна! есть библиотеки для этого в любом случае, и это не то, что вы просили :) просто хотел бы упомянуть, что
Ваша функция делает мою голову все нечеткой. Я попытаюсь реализовать его, когда у меня улучшится настроение, и дайте знать, работает ли он на нем. Но из того, что я читал, это выглядит многообещающе. – HyderA
roger, не забудьте включить внешнюю функцию uniord сверху! lemme знает, нужен ли вам какой-нибудь halp –
Словарь - очень хорошая идея, только проблема заключается в том, что за пределами латинского скрипта вы быстро сталкиваетесь с ситуациями, когда внешний контекст меняет символы - например, символы с несколькими глифами. Вы должны быть осторожны, чтобы избегать контекстно-зависимых символов в словаре. – Rushyo
Я не знаю о PHP-решении для этого, нет.
Google Translate Ajax APIs может быть для вас.
Заканчивать этот Javascript фрагмент из API Docs: Example: Language Detection
Вы можете использовать функцию, которую я написал для вас:
<?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);
}
Но, пожалуйста, проверьте его перед использованием.
[EDIT 1]
Ваш вопрос: "Как я могу определить, если входная строка является арабской" И я ответил на это, что не так?
[EDIT 2]
Прочитайте это - Detect language from string in PHP
[EDIT 3]
Извините, я переписать функцию этого, попробуйте:
function is_arabic($subject)
{
return (preg_match("/^[\x0600-\x06FF]/i", $subject) > 0);
}
«Is Arabic»! = «Содержит« Арабский язык »- название вопроса может быть немного расплывчатым, но вопросный орган более чем ясен, нет? – Piskvor
Если строка является арабской, она содержит арабские буквы или нет? –
Piskvor, RegEx DimaKrasun должен действительно распознавать арабские символы ... не только строку «Arabic». – Rushyo
Я предполагаю, что вы имеете в виду строку Unicode ... в этом случае просто найдите pr наличие любого символа с кодом между U + 0600-U + 06FF (1536-1791) в строке.
Inclusive, для ясности. – Rushyo
Первое, что я подумал о регулярном выражении с U + 0600-U + 06FF, но следующее должно было использовать \ p {Arabic} - в regex, я думаю, что \ p {Arabic} совпадает с U + 0600-U + 06FF, но я не пробовал это –
Я почти уверен, что это то же самое, но этот метод намного быстрее. – Rushyo
это будет проверить, если строка является арабский или имеет арабский текст
текст должен быть UNICODE, например, UTF-8
$str = "بسم الله";
if (preg_match('/[أ-ي]/ui', $str)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
Он отлично работал. Спасибо огромное! – wpcoder
public static function isArabic($string){
if(preg_match('/\p{Arabic}/u', $string))
return true;
return false;
}
Эта функция проверяет, является ли арабский или не вошли линия/предложение. Сначала я обрезал его, затем проверял слово за словом, вычисляя общее количество для обоих.
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;
}
}
PHP Text_LanguageDetect library способен обнаруживать 52 языка. Он тестируется и устанавливается через композитор и PEAR.
- 1. Php, как определить, является ли строка временем?
- 2. Как определить, является ли строка хешем
- 3. Определить, является ли строка больше другой строки
- 4. Как определить, является ли строка числовой?
- 5. Определить, является ли строка "утвердительной"?
- 6. Определить, является ли строка «пустой»
- 7. Как определить, является ли строка математическим выражением в PHP?
- 8. Как определить, является ли строка форматом даты?
- 9. Как определить, является ли строка идентификатором пользователя?
- 10. Как определить, является ли строка кодовым методом?
- 11. Как определить, является ли строка числом?
- 12. Как определить, является ли строка xml?
- 13. Как определить, является ли строка лапиндром?
- 14. Как определить, является ли строка веб-адресом?
- 15. RegEx, чтобы определить, является ли строка оценка
- 16. PHP: определить, является ли строка гиперссылкой и сделать ее доступной.
- 17. Синтаксические входная строка C#
- 18. Определить, является ли строка Date или Number
- 19. Определить, является ли одна строка префиксом другого
- 20. Пытается определить, является ли строка целым числом
- 21. Определить, является ли строка ссылкой w/jQuery
- 22. Входная строка через scanf
- 23. Как определить, является ли строка пустой или пустой в метазначении?
- 24. Как определить, является ли строка допустимым UUID v4?
- 25. только входная строка
- 26. Входная строка была ОШИБКА
- 27. Входная строка Строковая функция
- 28. Входная строка, заменяемая символом «+» пробелом
- 29. Как проверить, является ли входная строка именем файла или именем папки с помощью Vbscript
- 30. проверка, является ли строка двойной
Я предполагаю, что вы имели в виду арабский шрифт, а не арабский язык? Там большое различие. – Rushyo
Что делать, если строка содержит слова с нескольких языков? Пример: 私 не عرب – Lukman