Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

PHP: переклад першого символу кожного слова у верхній регістр для кодування UTF-8

  1. Автор публікації
  2. x64 (aka andi)

Наша взаимовыгодная связь https://banwar.org/

Привіт привіт!

Сьогоднішня стаття може бути корисна користувачам, які вирішили реалізувати власними силами роботу функції ucwords (), але працює це тільки з латинськими літерами. Ця функція переводить перший символ кожного слова у верхній регістр. Десятий питання, навіщо така штука потрібна: я поставив завдання і вирішую її доступними засобами. Якщо раптом вам знадобилася ця фіча - аве мені.

Для початку подивимося, які інструменти необхідні. Найголовніше, потрібен PHP версії 5.1.0 або вище, в них регулярними виразами додали розширені послідовності для роботи з UTF-8. І ще одна важлива умова - в списку розширень PHP має бути mbstring; відразу зазначу, що дане розширення мені зустрічалося на всіх хостингах, якими користувався.

І ще одна важлива умова - в списку розширень PHP має бути mbstring;  відразу зазначу, що дане розширення мені зустрічалося на всіх хостингах, якими користувався

Спершу вирішимо, що буде словом. Слово - це послідовність букв (або одна буква), яка починає рядок або розташована після роздільників - пробільних символів або знаків пунктуації.

Порушуючи попередні структури статей, відразу привожу рішення. Функція носить ім'я utf8_ucwords (). В якості єдиного параметра передається текст в кодуванні UTF-8.

function utf8_ucwords ($ str) {$ expr = '! (^ | \ pM | \ pP | \ pZ) (\ pL)! mue'; return preg_replace ($ expr, ' "$ 1". mb_strtoupper ( "$ 2", "UTF-8")', $ str); }

Вам необхідно один раз визначити цю функцію. Після цього перетворювати рядки можна хоча б так:

$ Str = utf8_ucwords ( 'привіт, чувак!');

Тепер розберемо детально першого і другий рядок тіла функції.

Параметр $ expr являє собою регулярний вираз, яке отримує значення першого символу кожного слова.

Символи, розташовані після знаку оклику - m, u, e - встановлюють внутрішні опції механізму регулярних вирази. Їх призначення:

  • m - передана рядок сприймається як набір рядків (вибачте за тавтологію). Це означає, що нам потрібно обробка символів переносу;
  • u - вказує, що аналізований текст представлений в кодуванні UTF-8;
  • e - спеціальна опція, яка примушує інтерпретувати другий параметр функції preg_replace () (про неї трохи пізніше) як код.

Символ! (Знак оклику) виступає як роздільник. PHP, на відміну від Perl або JavaScript, не має вбудованих інструкцій для роботи з регулярними виразами, тому ті представляються звичайними рядками.

Перейдемо безпосередньо до розбору знаків між! і! . Вираз складається з двох «кишень». Кожен «кишеню» буде потрібно описати особливо.

Перший - (^ | \ pM | \ pP | \ pZ) - шукає символ, що випереджає «слово». Це може бути:

  • ^ - початок пропозиції або нового рядка;
  • \ PM - знак (пробільний, непробельний або навколишній);
  • \ PP - знак пунктуації;
  • \ PZ - роздільник (рядки або абзацу, або пробільний).

По суті, так ми визначаємо початок слова.

Далі залишається отримати перший символ. За це відповідає другий «кишеню» - (\ pL), який повертає першу букву.

Важливо використовувати саме такий контекст. Модифікатор u наказує трактувати рядок в кодуванні UTF-8, а послідовність \ pL повертає перший символ слова. Для багатобайтові кодувань це дуже важливо, адже у них кожен символ може бути представлений декількома байтами. Звичайно, використання регулярних виразів, та ще й з повним аналізом рядки, трохи сповільнить ваш код. Але ми не збираємося працювати з гігабайтами тексту, вірно?

Другий рядок тіла функції повертає результуючий значення. Ми використовуємо функцію регулярних виразів:
preg_replace ($ expr, $ ch, $ str)
яка шукає в рядку $ str значення $ expr, і замінює його на $ ch. Відмінність від штатної str_replace () в тому, що замінюючи не жётско заданий рядок, а значення, що відповідають умові, в даному випадку - перша буква кожного слова.

Другий парметр функції, який покликаний замінити знайдені значення, являє собою повноцінний PHP код. У ньому значення першого «кишені» $ 1 конкатенуються з результатом роботи функції mb_strtoupper (), яка переводить букву в верхній регістр.

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

$ Str = 'це просте речення, aga! і ще крапля текста.как-то так. '; echo utf8_ucwords ($ str); / * Виведе: Це Просте Пропозиція, Aga! І Ще Крапля Текста.Как-Те Так. * /

Користуйтеся на здоров'я!

Якщо виникнуть питання, будь ласка, задавайте в коментарях, постараюся донести доступно.

Автор публікації

не в мережі 2 тижні

x64 (aka andi)

Коментарі: 2847 Публікації: 395 Реєстрація: 02-04-2009

Але ми не збираємося працювати з гігабайтами тексту, вірно?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: