Я наткнулся на проблему в PHP, и она оказывается намного труднее решить, чем я ожидал.
В версии моего сайта на Engli sh, У меня есть фрагмент открытого текста:
about-us
, который я могу легко перевести в текстовую форму с заглавной буквы:
About Us
, используя следующее:
$Text_Array = explode('-', $Plain_Text_Fragment); // ['about', 'us']
for ($i = 0; $i < count($Text_Array); $i++) {
$Text_Array[$i] = strtoupper($Text_Array[$i][0]) . substr($Text_Array[$i], 1);
}
$Capitalised_Text = implode(' ', $Text_Array); // 'About Us'
Оказывается, не так просто превратить фрагмент открытого текста:
über-uns
в заглавную текстовую форму:
Über Uns
TLDR: Какой самый простой подход в PHP для достижения этой цели?
Задача № 1: выяснить, является ли первая буква многобайтовой
Мне нужно только прописать первую букву каждого слова в фрагменте открытого текста, поэтому я легко могу сказать, что фрагмент открытого текста содержит один или несколько многобайтовых символов, используя:
strlen('über') === mb_strlen('über') // FALSE
, что до сих пор не говорит мне, является ли первая буква плэй Фрагмент текста является многобайтовым или нет. (Это может быть одна или несколько других букв).
Я не могу выделить и проверить $Text_Array[$i][0]
, потому что, конечно, 'ü'
в 'über'
равно $Text_Array[$i][0]
и $Text_Array[$i][1]
.
Также кажется, что mb_str_split()
не существует.
Проблема № 2: Использование заглавных букв 'ü'
Как только я прошёл задачу # 1 (подтвердив, что первая буква 'über'
является многобайтовой), мне не ясно, как ее использовать. Я хочу использовать mb_strtoupper()
, но мне нужно использовать это как для $Text_Array[$i][0]
и $Text_Array[$i][1]
, так и для других символов (если в $Text_Array[$i]
.
нет других многобайтовых символов). Я думаю, что могу решить Проблема # 2 примерно так:
$Text_Array[$i] = mb_strtoupper(substr($Text_Array[$i], 0, 2)) . substr($Text_Array[$i], 2);
Я проверил это, и оно определенно работает. Один вниз, два до go.
Проблема № 3: Вывод Ü
вместо Ü
Хотя я работаю с использованием кодировки UTF-8, я бы предпочел вывести HTML -escape Ü
, чем необработанный Ü
. Я подумал, что будет встроенная PHP функция, которая позволит мне конвертировать между двумя:
htmlentities()
Но я действительно не могу скажите, работает htmlentities()
или нет, потому что и мой DOM Inspector , и мой View Source говорят мне, что они видят Ü
, а не Ü
. Я ценю, что они могли бы видеть последних и они просто пытаются помочь , но я не могу быть абсолютно уверен, что функция PHP htmlentities()
или нет.
Вопрос:
Какой самый простой подход в PHP для преобразования:
über-uns
в:
Über Uns ?