本文整理汇总了PHP中UTF8::lowercase方法的典型用法代码示例。如果您正苦于以下问题:PHP UTF8::lowercase方法的具体用法?PHP UTF8::lowercase怎么用?PHP UTF8::lowercase使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UTF8
的用法示例。
在下文中一共展示了UTF8::lowercase方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: _bigram_exists
private function _bigram_exists($word, $lang)
{
$word = $lang === 'en' ? strtolower($word) : UTF8::lowercase($word);
#шаг 0.
#проверяем слова в списке слов-исключений
if (array_key_exists($word, $this->words_exceptions[$lang])) {
return false;
}
#шаг 1.
#проверка на 4 согласные буквы подряд; пример: больши{нств}о, юрисконсу{льтс}тво
if (preg_match('/(?:' . $this->consonant_lc[$lang] . '){4}/sxSX', $word, $m) && !array_key_exists($m[0], $this->consonants4_lc[$lang])) {
return true;
}
#шаг 2.
#проверка на 3 гласные буквы подряд; пример: длиннош{еее}, зм{еео}бразный
if (preg_match('/(?:' . $this->vowel_lc[$lang] . '){3}/sxSX', $word, $m) && !array_key_exists($m[0], $this->vowels3_lc[$lang])) {
return true;
}
#шаг 3.
$length = UTF8::strlen($word);
for ($pos = 0, $limit = $length - 1; $pos < $limit; $pos++) {
/*
TODO Качество проверки по несуществующим биграммам можно немного повысить,
если учитывать не только начало и конец слова, но и все позиции биграмм в слове.
*/
$ss = UTF8::substr($word, $pos, 2);
if ($pos === 0) {
$ss = ' ' . $ss;
} elseif ($pos === $limit - 1) {
$ss = $ss . ' ';
}
#ending of word
if (array_key_exists($ss, $this->bigrams)) {
return true;
}
}
return false;
}
示例2: parse
//.........这里部分代码省略.........
', '(?<=\\PL) [zж]_?h?_?[оo]_?[pп]_?[aаyуыiеeoо]', '(?<=\\PL) [мm]_?[аa]_?[нnh]_?[дdg]_?[aаyуыiеeoо]_ #манд[ауыео]
#исключения:
(?<! манда(?=[лн]|рин)
| manda(?=[ln]|rin)
)
', '(?<=\\PL) [гg]_?[оo]_?[вvb]_?[нnh]_?[оoаaяеeyу]', '(?<=\\PL) f_?u_?[cс]_?k', '[^р]_?[scс]_?[yуu]_?[kк]_?[aаiи]', '[^р]_?[scс]_?[yуu]_?[4ч]_?[кk]', '\\bл_?[оo]_?[хx]\\b', '(?<=\\PL) [шщ]_?[лl]_?[ю]_?[хш]');
$trans = array('_' => '\\x20', '\\pL' => '[^\\x20\\d]', '\\PL' => '[\\x20\\d]', '[:vowel:]' => '[аеиоуыэюяёaeioyu]', '[:consonant:]' => '[^аеиоуыэюяёaeioyu\\x20\\d]');
$re_badwords = str_replace('%RE_PRETEXT%', '(?:' . implode('|', $pretext) . ')', '~' . implode('|', $badwords) . '~sxuSX');
$re_badwords = strtr($re_badwords, $trans);
}
$s = UTF8::convert_from($s, $charset);
$replace = UTF8::convert_from($replace, $charset);
$ss = $s;
#saves original string
if ($is_html) {
#скрипты не вырезаем, т.к. м.б. обходной маневр на с кодом на javascript:
#<script>document.write('сло'+'во')</script>
#хотя давать пользователю возможность использовать код на javascript нехорошо
$s = is_callable(array('HTML', 'strip_tags')) ? HTML::strip_tags($s, null, true, array('comment', 'style', 'map', 'frameset', 'object', 'applet')) : strip_tags($s);
#заменяем html-сущности в "чистый" UTF-8
$s = UTF8::html_entity_decode($s, $is_htmlspecialchars = true);
}
if (strtoupper(substr($charset, 0, 3)) === 'UTF') {
#remove combining diactrical marks
$additional_chars = array("");
$s = UTF8::diactrical_remove($s, $additional_chars);
}
#ВотБ/\яПидорыОхуелиБлятьНахуйПохуйПи3децПолный
if (version_compare(PHP_VERSION, '5.2.0', '>=')) {
$s = preg_replace('~ [\\p{Lu}3] (?>\\p{Ll}+|/\\\\|[@36]+)++ #Вот
(?= [\\p{Lu}3] (?:\\p{Ll} |/\\\\|[@36] ) ) #Бля
~sxuSX', '$0 ', $s);
}
$s = UTF8::lowercase($s);
#получаем в массив только буквы и цифры
#"с_л@о#во,с\xc2\xa7лово.Слово" -> "с л о во с лово слово слово слово слово"
preg_match_all('~(?> \\xd0[\\xb0-\\xbf]|\\xd1[\\x80-\\x8f\\x91] #[а-я]
| /\\\\ #л
| @ #а
| [a-z\\d]+
)+
~sxSX', $s, $m);
$s = ' ' . implode(' ', $m[0]) . ' ';
$trans = array('/\\' => 'л', '@' => 'а');
$s = strtr($s, $trans);
#цифровые подделки под буквы
$trans = array('~ [3з]++ [3з\\x20]*+ ~sxuSX' => 'з', '~ [6б]++ [6б\\x20]*+ ~sxuSX' => 'б');
$s = preg_replace(array_keys($trans), array_values($trans), $s);
#убираем все повторяющиеся символы, ловим обман типа "х-у-у-й"
#"сллоооовоо слово х у у й" --> "слово слово х у й"
$s = preg_replace('/( [\\xd0\\xd1][\\x80-\\xbf] \\x20? #optimized [а-я]
| [a-z\\d] \\x20?
) \\1+
/sxSX', '$1', $s);
//echo $s
if ($replace === null || version_compare(PHP_VERSION, '5.2.0', '<')) {
$result = preg_match($re_badwords, $s, $m, PREG_OFFSET_CAPTURE);
if (function_exists('preg_last_error') && preg_last_error() !== PREG_NO_ERROR) {
return preg_last_error();
}
if ($result === false) {
return 1;
}
#PREG_INTERNAL_ERROR = 1
if ($result && $replace === null) {
list($word, $offset) = $m[0];
示例3: preg_quote_case_insensitive
/**
* Make regular expression for case insensitive match
* Example (non ASCII): "123_слово_test" => "123_(с|С)(л|Л)(о|О)(в|В)(о|О)_[tT][eE][sS][tT]"
* Example (only ASCII): "123_test" => "(?i:123_test)"
*
* @param string $s
* @param string|null $delimiter If the optional delimiter is specified, it will also be escaped.
* This is useful for escaping the delimiter that is required by the PCRE functions.
* The / is the most commonly used delimiter.
* @return string|bool|null Returns FALSE if error occurred
*/
public static function preg_quote_case_insensitive($s, $delimiter = null)
{
if (!ReflectionTypeHint::isValid()) {
return false;
}
if (is_null($s)) {
return $s;
}
if (self::is_ascii($s)) {
return '(?i:' . preg_quote($s, $delimiter) . ')';
}
#speed improve
$s_re = '';
$s_lc = UTF8::lowercase($s);
if ($s_lc === false) {
return false;
}
$s_uc = UTF8::uppercase($s);
if ($s_uc === false) {
return false;
}
$chars_lc = UTF8::str_split($s_lc);
if ($chars_lc === false) {
return false;
}
$chars_uc = UTF8::str_split($s_uc);
if ($chars_uc === false) {
return false;
}
foreach ($chars_lc as $i => $char) {
if ($chars_lc[$i] === $chars_uc[$i]) {
$s_re .= preg_quote($chars_lc[$i], $delimiter);
} elseif (self::is_ascii($chars_lc[$i])) {
$s_re .= '[' . preg_quote($chars_lc[$i] . $chars_uc[$i], $delimiter) . ']';
} else {
$s_re .= '(' . preg_quote($chars_lc[$i], $delimiter) . '|' . preg_quote($chars_uc[$i], $delimiter) . ')';
}
}
return $s_re;
}
示例4: parse
/**
* Грамматический разбор html кода на предложения и слова
*
* @param string $s Html текст
* @param array|null $words Массив всех слов:
* array(<абсол._поз._слова> => <слово>, ...)
* @param array|null $sentences Массив предложений:
* array(
* <номер_предложения> => array(
* <абсол._поз._слова> => <слово>,
* ...
* ),
* ...
* )
* Внимание! Значение передаётся по ссылке:
* $sentences[$sentence_pos][$abs_pos] =& $words[$abs_pos];
* @param array|null $uniques Массив уникальных слов, отсортированный по ключам.
* В ключах слова в нижнем регистре, в значениях кол-во их появлений в тексте.
* @param array|null $offset_map Распределение абс. позиций слов к абс. байтовым позициям в нормализованном тексте:
* array(<абсол._поз._слова> => <байт._поз._слова>, ...)
* @return string Нормализованный текст
*/
public function parse($s, array &$words = null, array &$sentences = null, array &$uniques = null, array &$offset_map = null)
{
$s = $this->normalize($s);
/*
Розенталь:
"(?)" ставится после слова для выражения сомнения или недоумения
"(!)" ставится после слова для выражения автора к чужому тексту (согласия, одобрения или иронии, возмущения)
*/
preg_match_all('~(?>#1 letters
( #\\p{L}++
(?>' . $this->re_langs . ')
#special
(?> \\# (?!\\p{L}|\\d) #programming languages: C#
| \\+\\+?+ (?!\\p{L}|\\d) #programming languages: C++, T++, B+ trees, Европа+; but not C+E, C+5
)?+
)
#2 numbers
| ( \\d++ #digits
(?> % (?!\\p{L}|\\d) )?+ #brand names: 120%
)
#| \\p{Nd}++ #decimal number
#| \\p{Nl}++ #letter number
#| \\p{No}++ #other number
#paragraph (see self::normalize())
| \\r\\r
#sentence end by dot
| \\. (?=[\\x20' . " " . '] (?!\\p{Ll}) #following symbol not letter in lowercase
)
#sentence end by other
| (?<!\\() #previous symbol not bracket
[!?;…]++ #sentence end
#following symbol not
(?!["\\)' . "»" . "”" . "’" . "“" . ']
)
)
~sxuSX', $s, $m, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
#cleanup
$words = array();
$sentences = array();
$uniques = array();
$offset_map = array();
#init
$sentence_pos = 0;
#номер предложения
$abs_pos = 0;
#номер абсолютной позиции слова в тексте
$w_prev = false;
#предыдущее слово
foreach ($m as $i => $a) {
$is_alpha = $is_digit = false;
if ($is_digit = array_key_exists(2, $a)) {
list($w, $pos) = $a[2];
} elseif ($is_alpha = array_key_exists(1, $a)) {
list($w, $pos) = $a[1];
} else {
list($w, $pos) = $a[0];
if ($w !== '.') {
if (!empty($sentences[$sentence_pos])) {
$w_prev = false;
$sentence_pos++;
}
continue;
}
if (!empty($sentences[$sentence_pos])) {
$tmp = $w_prev;
$w_prev = false;
if ($tmp === false || UTF8::strlen($tmp) < 2 && !ctype_digit($tmp) || is_array($this->dot_reductions) && array_key_exists(UTF8::lowercase($tmp), $this->dot_reductions)) {
continue;
}
$sentence_pos++;
}
continue;
}
$w_prev = $w;
//.........这里部分代码省略.........
示例5: words_highlight
/**
* "Подсветка" найденных слов для результатов поисковых систем.
* Ищет все вхождения цифр или целых слов в html коде и обрамляет их заданными тэгами.
* Текст должен быть в кодировке UTF-8.
*
* @param string|null $s Текст, в котором искать
* @param array|null $words Массив поисковых слов
* @param bool $is_case_sensitive Искать с учётом от регистра?
* @param string $tpl HTML шаблон для замены
* @return string|bool|null returns FALSE if error occured
*/
public static function words_highlight($s, array $words = null, $is_case_sensitive = false, $tpl = '<span class="highlight">%s</span>')
{
if (!ReflectionTypeHint::isValid()) {
return false;
}
if (is_null($s)) {
return $s;
}
#оптимизация для пустых значений
if (!strlen($s) || !$words) {
return $s;
}
#оптимизация
#{{{
$s2 = UTF8::lowercase($s);
foreach ($words as $k => $word) {
$word = UTF8::lowercase(trim($word, ".. *"));
if ($word == '' || strpos($s2, $word) === false) {
unset($words[$k]);
}
}
if (!$words) {
return $s;
}
#}}}
#d($words);
#кэширование построения рег. выражения для "подсвечивания" слов в функции при повторных вызовах
static $func_cache = array();
$cache_id = md5(serialize(array($words, $is_case_sensitive, $tpl)));
if (!array_key_exists($cache_id, $func_cache)) {
$re_words = array();
foreach ($words as $word) {
$is_mask = substr($word, -1) === '*';
if ($is_mask) {
$word = rtrim($word, '*');
}
$is_digit = ctype_digit($word);
#рег. выражение для поиска слова с учётом регистра или цифр:
$re_word = preg_quote($word, '~');
#рег. выражение для поиска слова НЕЗАВИСИМО от регистра:
if (!$is_case_sensitive && !$is_digit) {
if (UTF8::is_ascii($word)) {
$re_word = '(?i:' . $re_word . ')';
} else {
$lc = UTF8::str_split(UTF8::lowercase($re_word));
$uc = UTF8::str_split(UTF8::uppercase($re_word));
$re_word = array();
foreach ($lc as $i => $tmp) {
$re_word[] = '[' . $lc[$i] . $uc[$i] . ']';
}
$re_word = implode('', $re_word);
}
}
#d($re_word);
if ($is_digit) {
$append = $is_mask ? '\\d*+' : '(?!\\d)';
} else {
$append = $is_mask ? '\\p{L}*+' : '(?!\\p{L})';
}
$re_words[$is_digit ? 'digits' : 'words'][] = $re_word . $append;
}
if (array_key_exists('words', $re_words) && $re_words['words']) {
#поиск вхождения слова:
$re_words['words'] = '(?<!\\p{L}) #просмотр назад (\\b не подходит и работает медленнее)
(?:' . implode(PHP_EOL . '| ', $re_words['words']) . ')
';
}
if (array_key_exists('digits', $re_words) && $re_words['digits']) {
#поиск вхождения цифры:
$re_words['digits'] = '(?<!\\d) #просмотр назад (\\b не подходит и работает медленнее)
(?:' . implode(PHP_EOL . '| ', $re_words['digits']) . ')
';
}
#d(implode(PHP_EOL . '| ', $re_words));
$func_cache[$cache_id] = '~(?> #встроенный PHP, Perl, ASP код
<([\\?\\%]) .*? \\1>
\\K
#блоки CDATA
| <\\!\\[CDATA\\[ .*? \\]\\]>
\\K
#MS Word тэги типа "<![if! vml]>...<![endif]>",
#условное выполнение кода для IE типа "<!--[if lt IE 7]>...<![endif]-->":
| <\\! (?>--)?
\\[
(?> [^\\]"\']+ | "[^"]*" | \'[^\']*\' )*
\\]
(?>--)?
//.........这里部分代码省略.........