Что такое код strtolower


Содержание

Почему я должен использовать strtolower (), а не mb_strtolower ()?

Я понимаю разницу между использованием / поведением strtolower() а также mb_strtolower() функции. И это был задан вопрос до ��

Но я не понимаю — какова цель strtolower ?

Это доступно из-за обратной совместимости? Или есть некоторые случаи использования, когда strtolower предпочтительнее? Кажется, что mb_strtolower() это безопаснее и универсальнее, поэтому я испытываю желание использовать его везде …

Решение

Не совсем обратная совместимость, но возможность использовать код без дополнительно загруженного многобайтового расширения строки. Так что вопрос переносимости кода.

strtolower() всегда в наличии mb_strtolower() доступно только если загружен дополнительный модуль mbstring. Функция перегрузки функции позволяет использовать «общий» вызов strtolower() который на самом деле выполнит mb_strtolower() если настроен такой. Так что на самом деле нет необходимости явно кодировать mb_strtolower() совсем…

Это делает код более переносимым, поскольку он может работать в системах с расширением mbstring или без него.

Другие решения

strtolower() это нативная функция и всегда будет там по сравнению с mb_strtolower() который доступен только если MBstring модуль установлен \ включен.

Но на вопрос, почему одно следует использовать поверх другого, это довольно просто. Вы можете использовать их и то и другое и только использовать mb_strtolower() когда его нужно и или доступно.

Если вы пишете что-то, вы не должны использовать любой специальные символы в сценариях, именах файлов, структурах БД и т. д., поскольку они должны быть независимыми от языка для улучшения переносимости и тем самым устранять несоответствия между операционными системами. Сценарии могут вести себя по-другому в других средах, например, Linux чувствительна к регистру фс /децибел операции там, где винды нет.

Сценарий должен не приходится иметь дело со своими собственными специальными символами, поскольку это не нужно, и это будет:

  • Стоимость исполнения, strtolower() намного быстрее чем mb_strtolower()
  • Потерять переносимость, если MBstring недоступен на сервере.

Например, если вы используете другие системы, такие как ПСР-4 автозагрузчик .

Будет пытаться загрузить «Çava.php» вместо «çava.php», потому что он не сможет снизить регистр из-за того, что он использует нативный strtolower() функции, создающие непостоянство. Вместо этого просто сохраните ASCII.

mb_strtolower() должен использоваться только для пользовательского ввода / вывода, где strtolower() следует использовать для системно-ориентированного форматирования регистра.

Это как говорится; strtolower() будет достаточно для большинства чьих-либо потребностей, даже для пользовательского ввода / вывода, но тогда возникает вопрос где а также как Вы применяете эти данные. Имейте в виду, если для вывода пользователю всегда есть CSS текст-преобразования метод.

Короткий ответ

  • Вы не всегда уверены mbstring расширение будет доступно в вашей среде
  • strtolower() значительно быстрее.

Еще немного

mbstring расширение не является расширением PHP по умолчанию. Это означает, что он не включен по умолчанию, хотя по своему опыту я никогда не сталкивался с хостинг-провайдером, у которого его не было включено.

Ваш вопрос заставил меня задуматься, будут ли они иметь разницу в производительности, поэтому я написал функцию быстрого теста, которую вы можете найти Вот .

Кажется, из нескольких тестов, которые я запускал на некоторых случайных строках strtolower() является как минимум в 50 раз быстрее в его исполнении.

Если вы знаете, что имеете дело со строками, которые совместимы с strtolower() и у вас их очень много, возможно, стоит изучить strtolower() вместо.

Strtolower php Использование strtolower, не работает для кириллицы , примеры

Сегодня разберем функцию strtolower, которая преобразует в строку в нижний регистр. Т.е. все буквы делает строчными в php.

Использование strtolower:

В переменной находится текст, который пропускается через функцию и получается соответствующая строка.

Использование strtolower для латиницы:

Strtolower должен по умолчанию работать с латиницей пример на строчке:

Mary Had A Little Lamb and She LOVED It So

Давайте её пропустим через функцию strtolower и получим:

mary had a little lamb and she loved it so

Использование strtolower для кириллицы:

Давайте пропустим вот эту строку «У Мэри Был Маленький Ягненок и Она Его Очень ЛЮБИЛА» через strtolower и посмотрим, что произойдет:

К сожалению, strtolower не работает для кириллицы и выдает такой результат:

У Мэри Был Маленький Ягненок и Она Его Очень ЛЮБИЛА

Мы видим, что ничего у нас не произошло…

Strtolower не работает для кириллицы

Вместо strtolower можно использовать mb_strtolower

Илон Маск рекомендует:  Что такое золотое сечение

Но если например мы будем использовать данную функцию в таком виде:

То получим такой результат:

Чтобы mb_strtolower заработала с кириллицей ей нужно придать кодировку, таким образом:

$str = mb_strtolower($str, «UTF-8»);

Смотрим, что у нас в итоге получилось:

у мэри был маленький ягненок и она его очень любила Не забудь !

Почему не работает функция strtolower() на php

Иногда, при работе с текстов в PHP, приходится сталкиваться с «неверной» работой ряда функций:
strtolower и strtoupper – текст не меняет свой регистр.
substr – «промахивается при обрезании в два раза».
strpos и т.д. – возвращают неверный результат.
Все эти проблемы связаны с кодировкой текста!
Обычно из-за того, что функции применяются к строкам в UTF-8, а не в windows-1251 (CP1251).

  1. Использовать альтернативные функции для работы с Multibyte String. Все они начинаются с префикса mb_ : mb_strtolower, mb_substr, mb_strpos… но: для работы таких функций, на сервере требуется расширение php_mbstring
    &nbsp
  2. Правильно установить «родную» кодировку:
  1. Можно сначала переконвертировать строку в windows-1251, проделать нужные операции, а затем результат перевести в UTF-8

Почему не работает функция strtolower()

Минута “мелкозаписей” в стиле “флудильни” опять в эфире! Сижу сейчас на работе и вдруг напоролся на один старый как моя моторолла баг – “Почему не работает функция strtolower() на php с кириллицей?“.

Немного посмеялся и поправил на более корректный вариант в данном случае, заодно решил и сюда отписать, вдруг читатель встретился с таким, но, к сожалению, не будет знать как это решить.

Все дело в том, что strtolower() не работает с многобитными (многобайтными) кодировками (UTF-8 – 16 bit/символ), а кириллица как раз в этом числе – вот почему у вас с английским все вышло, а с русским нет=)

Для этого специально придумали расширение strtolower(), это собственно mb_strtolower(), и, как альтернатива mb_convert_case(). Как использовать?

  • $str = ‘Наша Строка На Русском’;
  • //аналогично mb_strtoupper()
  • echo mb_strtolower($str,»UTF-8″);

//тут используется одна функция, но направления конвертации определяются

//флагами MB_CASE_LOWER, MB_CASE_UPPER, etc.

  • echo mb_convert_case($str, MB_CASE_LOWER, «UTF-8»);

Проблемы работы функций strtoupper() и strtolower() с кириллицей

Проблемы при работе с кириллицей в PHP-скриптах функций strtoupper() и strtolower() возникают, когда неправильно определена текущая локаль (locale). Для правильного её определения Вам следует воспользоваться функцией setlocale() в самом начале вашего PHP-сценария, как в следующем примере:

В случае если используется многобайтовая кодировка, например UTF-8 следует использовать функции mb_strtolower() и mb_strtoupper().

Если у Вас возникли проблемы с устранением данной проблемы, Вы всегда можете обратиться в Службу технической поддержки хостинга.

String. To Lower Метод

Определение

Возвращает копию этой строки, переведенную в нижний регистр. Returns a copy of this string converted to lowercase.

Перегрузки

Возвращает копию этой строки, переведенную в нижний регистр, используя правила определения регистра заданного языка и региональных параметров. Returns a copy of this string converted to lowercase, using the casing rules of the specified culture.

Возвращает копию этой строки, переведенную в нижний регистр. Returns a copy of this string converted to lowercase.

ToLower(CultureInfo)

Возвращает копию этой строки, переведенную в нижний регистр, используя правила определения регистра заданного языка и региональных параметров. Returns a copy of this string converted to lowercase, using the casing rules of the specified culture.

Параметры

Объект, задающий правила определения регистра для языка и региональных параметров. An object that supplies culture-specific casing rules.

Возвраты

Эквивалент текущей строки в нижнем регистре. The lowercase equivalent of the current string.


Исключения

culture — null . culture is null .

Примеры

В следующем примере две строки символов верхнего регистра преобразуются в символы нижнего регистра с использованием английской-США и турецкого Турция языка, а затем сравниваются строки в нижнем регистре. The following example converts two strings of uppercase characters to lowercase characters using the English-United States and Turkish-Turkey cultures, then compares the lowercase strings. Строки в верхнем регистре идентичны, за исключением того, что для каждого вхождения ПРОПИСной буквы Юникода I в одной строке другая строка содержит ПРОПИСную БУКВу I с ТОЧКОЙ выше. The uppercase strings are identical except that for each occurrence of the Unicode LATIN CAPITAL LETTER I in one string, the other string contains LATIN CAPITAL LETTER I WITH DOT ABOVE.

Комментарии

Правила учета регистра языка и региональных параметров, заданные параметром culture , определяют способ изменения регистра строки. The casing rules of the culture specified by the culture parameter determine the way the case of the string is changed.

Этот метод не изменяет значение текущего экземпляра. This method does not modify the value of the current instance. Вместо этого возвращается новая строка, в которой все символы в текущем экземпляре преобразуются в нижний регистр. Instead, it returns a new string in which all characters in the current instance are converted to lowercase.

Вопросы безопасности Security Considerations

Если методу ToLower(CultureInfo) передается объект CultureInfo, отличный от CultureInfo.InvariantCulture, то операция с регистром учитывает правила, зависящие от языка и региональных параметров. If you pass the ToLower(CultureInfo) method a CultureInfo object other than CultureInfo.InvariantCulture, the casing operation will take culture-specific rules into account. Если требуется версия идентификатора операционной системы в нижнем регистре или в верхнем регистре, например имя файла, именованный канал или раздел реестра, используйте метод ToLowerInvariant или ToUpperInvariant. If you need the lowercase or uppercase version of an operating system identifier, such as a file name, named pipe, or registry key, use the ToLowerInvariant or ToUpperInvariant method. Это дает тот же результат в каждой культуре и работает более эффективно. This produces the same result in every culture and performs more efficiently.

Илон Маск рекомендует:  Что такое код ingres_fetch_row

Дополнительно

ToLower()

Возвращает копию этой строки, переведенную в нижний регистр. Returns a copy of this string converted to lowercase.

Возвраты

Строка в нижнем регистре. A string in lowercase.

Примеры

В следующем примере несколько строк со смешанным регистром преобразуется в нижний регистр. The following example converts several mixed case strings to lowercase.

Комментарии

Этот метод учитывает правила регистра текущего языка и региональных параметров. This method takes into account the casing rules of the current culture.

Этот метод не изменяет значение текущего экземпляра. This method does not modify the value of the current instance. Вместо этого возвращается новая строка, в которой все символы в текущем экземпляре преобразуются в нижний регистр. Instead, it returns a new string in which all characters in the current instance are converted to lowercase.

Вопросы безопасности Security Considerations

Операция с регистром регистра, полученная в результате вызова метода ToLower(), учитывает соглашения о регистре текущего языка и региональных параметров. The casing operation that results from calling the ToLower() method takes the casing conventions of the current culture into account. Если требуется версия идентификатора операционной системы в нижнем регистре или в верхнем регистре, например имя файла, именованный канал или раздел реестра, используйте методы ToLowerInvariant или ToUpperInvariant. If you need the lowercase or uppercase version of an operating system identifier, such as a file name, named pipe, or registry key, use the ToLowerInvariant or ToUpperInvariant methods. Это дает тот же результат в каждом языке и региональных параметрах (в отличие от метода ToLower()) и работает более эффективно. This produces the same result in every culture (unlike the ToLower() method) and performs more efficiently.

Примечания для тех, кто вызывает этот метод

Как описано в статье рекомендации по использованию строк, рекомендуется избегать вызова методов регистра строк, которые заменяют значения по умолчанию, а вызывают методы, для которых требуется явно указать параметры. As explained in Best Practices for Using Strings, we recommend that you avoid calling string casing methods that substitute default values and instead call methods that require parameters to be explicitly specified. Чтобы преобразовать символ в нижний регистр с помощью соглашений о регистре текущего языка и региональных параметров, вызовите перегрузку метода ToLower(CultureInfo) со значением CurrentCulture для своего параметра culture . To convert a character to lowercase by using the casing conventions of the current culture, call the ToLower(CultureInfo) method overload with a value of CurrentCulture for its culture parameter.

php — Почему я должен использовать strtolower(), а не mb_strtolower()?

Я понимаю разницу в использовании/поведении между функциями strtolower() и mb_strtolower() . И он был задан до:)

Но я не понимаю — какова текущая цель strtolower ?

Доступно ли это из-за обратной совместимости? Или есть некоторые варианты использования, когда strtolower является предпочтительным? Кажется, что mb_strtolower() более безопасен и более универсален, поэтому я испытываю соблазн использовать его везде.

    2 3
  • 29 апр 2020 2020-04-29 18:02:44
  • Džuris

3 ответа

Короткий ответ

  • Вы не всегда уверены, что расширение mbstring будет доступно в вашей среде.
  • strtolower() значительно быстрее.

Немного больше

Расширение mbstring не является расширением PHP по умолчанию. Это означает, что он не включен по умолчанию, хотя, по моему опыту, я никогда не сталкивался с хостинг-провайдером, у которого его не было.

Ваш вопрос заставил меня задаться вопросом, будут ли они иметь разницу в производительности, поэтому я написал быструю контрольную функцию, которую вы можете найти здесь.

Из нескольких тестов я запускал некоторые случайные строки, кажется, что strtolower() не менее 50 раз быстрее в нем.

Если вы знаете, что имеете дело со строками, совместимыми с strtolower() , и у вас их действительно много, возможно, стоит рассмотреть strtolower() .

  • 29 апр 2020 2020-04-29 18:02:45
  • anpel

strtolower() является встроенной функцией и всегда будет там по сравнению с mb_strtolower() , которая доступна только в том случае, если модуль mbstring установлен enabled.

Но на вопрос, почему нужно использовать друг друга, хорошо, что довольно просто. Вы можете использовать их и и использовать mb_strtolower() только тогда, когда это необходимо и/или доступно.

Если вы script что-то не должны использовать любые специальные символы в сценариях, именах файлов, структурах db и т.д., так как он должен быть независимым от языка для улучшения переносимости и тем самым устраняет несогласованность между операционные системы. Сценарии могут вести себя по-разному в других средах, например, Linux чувствительна к регистру на fs/db, где Windows не является.

Илон Маск рекомендует:  Что такое код readline_write_history

A script должен не иметь дело со своими специальными символами, поскольку он не нужен, и он будет:

  • Эффективность затрат strtolower() намного быстрее, чем mb_strtolower()
  • Потерять переносимость, если mbstring недоступна на сервере.

Например, если вы используете другие системы, такие как автозагрузчик PSR-4.

Будет пытаться загрузить «Çava.php» вместо «çava.php», потому что он не позволяет опустить регистр из-за того, что он использует встроенные функции strtolower() , создавая непостоянство. Вместо этого просто сохраните ASCII.

mb_strtolower() следует использовать только для ввода/вывода пользователя, где strtolower() следует использовать для форматирования в системном формате.

Это сказано; strtolower() будет достаточно для большинства людей, даже для ввода/вывода пользователя, но затем возникает вопрос, где и как вы применяете эти данные. Имейте в виду, что если его просто для вывода пользователю, всегда существует метод text-transform.

проблемы с функцией strtolower

У меня есть текст на иностранном языке на моей странице, но когда я делаю его строчным, он начинает выглядеть так …

я установил не могли бы вы мне объяснить почему? заранее спасибо

попробовали ли вы использовать mb_strtolower ()?

PHP5 не совместим с UTF-8, поэтому вам все равно нужно прибегнуть к расширению mb. Я предлагаю вам установить внутреннюю кодировку mb на utf-8, а затем вы можете свободно использовать ее функции, не указав все кодировки:

Я нашел это решение здесь

работает для меня (нижний регистр)

mb_strtolower () и указать кодировку как второй параметр?

Примеры на этой странице, похоже, работают.

Вы также можете попробовать:

Php по умолчанию не знает об utf-8. Предполагается, что любая строка ASCII, поэтому strtolower преобразует байты, содержащие коды заглавных букв AZ, в коды нижнего регистра az. Поскольку буквы не-ascii-UTF-8 написаны с двумя или более байтами, strtolower преобразует каждый байт отдельно, а если байт содержит код, равный буквам AZ, он преобразуется. В результате последовательность прерывается, и она больше не соответствует правильному характеру.

Чтобы изменить это, вам нужно настроить расширение mbstring:

заменить strtolower на mb_strtolower или использовать mb_strtolower direclty. В любом случае вам нужно потратить некоторое время, чтобы настроить параметры mbstring в соответствии с вашими требованиями.

Вместо этого используйте mb_strtolower , поскольку strtolower не работает с многобайтовыми символами.

strtolower () будет выполнять преобразование только в текущей выбранной локали.

Я бы попробовал mb_convert_case () . Убедитесь, что вы явно указываете кодировку.

Ошибка! Строковые функции работают некорректно

Проверка системы ругается на
«Параметры настройки UTF (mbstring и константа BX_UTF) Ошибка! Строковые функции работают некорректно»
и предупреждает что могут возникать ошибки в неожиданных местах. Так как натолкнулся на несколько странных багов, подозреваю это одна из проблем.
Если кто-нибудь сталкивался и осилил решить, подскажите, пожалуйста, как именно (кроме чистой новой установки, разумеется).

dbconn.php:

Код

phpinfo() :

Код

Проблема заключалась в том, что строковые функции продолжали выполняться для однобайтовой кодировки. Помогла принудительная установка

Код

в php_interface/init.php

а тут помогите расшифровать что не так

У меня возникла такая же проблема: при проверке сайта появилось сообщение:

Сайт работает в однобайтовой кодировке, phpinfo выдает:

Подскажите как исправить эту ошибку

Цитата
Евгений Ляхов написал:
А какая версия php стоит?

PHP Version 7.1.30

Цитата
Andy32 написал:
Подтвержаю наличие ошибки.
При этом как минимум trim стал работает косячно — обрезает первую кириллическую В

Да, тоже столкнулись с этой проблемой.

Не знаю, насколько оно корректное, но работает.

Да, спасибо. Сразу попал на эту страницу с решением.

Сделал все как описано, в Админке при проверке системы ошибка ушла, а вот с буквой «В» проблема все равно наблюдается.

Для своего случая (Debian 9, PHP 7.1.33, только Apache, кодировка нужного сайта CP1251, другие сайты — UTF-8 ) решил проблему так:
— проверяем установленные локали на сервере:
locale -a
C
C.UTF-8
POSIX

— запускаем dpkg-reconfigure locales
выбираем из списка:
ru_RU.CP1251 CP1251
ru_RU.UTF-8 UTF-8

на следующей странице по умолчанию выбираем ru_RU.UTF-8 UTF-8 (UTF-8 сайтов просто физически больше, да и дебиан настроен на UTF-8 в консоле)

дальше система все ставит и настраивает сама.

— в /bitrix/php_interface/dbconn.php добавляем:

— перезапускаем веб-сервер (в моем случае только Apache): /etc/init.d/apache2 restart
(или service apache2 restart)

Проверяем: Тестирование системы -> Полное тестирование системы

Ошибка ушла!
При этом в системе все нормально работает и с UTF-8 сайтами в других каталогах

Функция Strtolower

Функция Strtolower преобразует строку в нижний регистр.
Функция Strtolower возвращает строку String, в которой все буквенные символы переведены в нижний регистр.

Принадлежность того или иного символа к буквенным определяется с учетом текущей локали. Это означает, что, например, в используемой по умолчанию локали «C», символ Ä не будет преобразован.

В параметре String должна содержатся входная строка.

Пример использования:
Результатом выполнения будет строка в нижнем регистре:
Если необходимо выполнить функцию Strtolower для многобайтовых кодировок, используйте аналогичную функцию Mb_strtolower:
Функция Mb_strtolower имеет дополнительный параметр Encoding, который представляет собой символьную кодировку. Если он опущен, вместо него будет использовано значение внутренней кодировки.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL