PHP: Сделать строку в верхнем регистре, но не HTML-сущностей в нем? - PullRequest
8 голосов
/ 21 января 2011

Как я могу сделать содержимое строки в верхний регистр, но не html сущностей в нем?Это возможно?

$str = 'FUNDA MENTALISM';
echo strtoupper($str);

Я хочу произвести это,

'FUNDA MENTALISM'

, но я получаю это с strtoupper()

'FUNDA MENTALISM'

Ответы [ 4 ]

9 голосов
/ 21 января 2011

Я знаю, что вы не указали CSS в своих тегах, но в большинстве случаев проще оставить это на стороне клиента (если вы только предназначали эту строку для отображения в браузере).

Применение CSStext-transform: uppercase; сделает это за вас.

3 голосов
/ 21 января 2011

Ну, удалите сущности и используйте многобайтовый набор символов!

$string = html_entity_decode($string, ENT_COMPAT, 'UTF-8');
$string = mb_convert_case($string, MB_CASE_UPPER, 'UTF-8');

Затем выведите строку. Нет необходимости в большинстве html-сущностей, просто используйте нативные символы и правильно установите вывод документа.

Если вы действительно должны использовать сущности, регулярное выражение в следующем порядке:

$callback = function($match) {
    return strtoupper($match[1]);
}
$regex = '/(\w+(?=&)|(?<=;)\w+)/';
$string = preg_replace_callback($regex, $callback, $string);

Обратите внимание, что я не проверял это регулярное выражение, но оно должно работать, так как он ищет буквы, за которыми сразу не следует символ ; ...

1 голос
/ 10 марта 2014

Я не могу использовать вариант CSS от Kapa, ​​потому что мне это нужно для тега title.Решение, предоставляемое ircmaxell, может быть правильным, но поскольку некоторые серверы не имеют расширения mbstring, это решение может быть лучше:

echo htmlentities(strtoupper(html_entity_decode($str)));
1 голос
/ 18 октября 2013

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

$var=<i>This</i><u>is</u><b>test</b><br>New line

функция в верхнем регистре strtoupper($var); Вывод будет

<I>THIS</I><U>IS</U><B>TEST</B><BR>NEW LINE

function htmlEntities () $var=htmlEntities($var); ВЫХОД:

&lt;I&gt;THIS&lt;/I&gt;&lt;U&gt;IS&lt;/U&gt;&lt;B&gt;TEST&lt;/B&gt;&lt;BR&gt;NEW LINE

ФИНАЛЬНОЕ Кодирование $var=html_entity_decode($var); вывод:

ЭТО ЕСТЬ ТЕСТ
НОВАЯ ЛИНИЯ

Если первые htmlentities конвертируются, чем верхний регистр; декодирование завершится неудачно, поскольку закодированный тест сменился на верхний регистр, а функция не выполнена

...