Игнорирование верхнего индекса в тегах заголовков - PullRequest
2 голосов
/ 17 декабря 2008

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

Например, одна страница может называться «Experian». Проблема в том, что некоторые значения для имен партнеров не работают, потому что такие значения, как

  $partnername22 = Discover<sup>tm</sup> Magazine

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

Ответы [ 9 ]

2 голосов
/ 17 декабря 2008

Для:

<title><?php echo $offer22name ?>is a magazine</title>

изменить на:

<title><?php echo preg_replace('|<sup>(.*?)</sup>|', '($1)', $offer22name) ?> is a magazine</title>

Но, как упоминал Брайан, в этом сценарии вы должны использовать PHP strip_tags (). Итак:

<title><?php echo strip_tags($offer22name) ?> is a magazine</title>
2 голосов
/ 17 декабря 2008
<title><?PHP echo str_replace('<sup>tm</sup>', '&trade;', $offer22name); ?> is a magazine</title>

Или, еще безопаснее:

<title><?PHP echo strip_tags(str_replace('<sup>tm</sup>', '&trade;', $offer22name)); ?> is a magazine</title>

Или, перехватывая больше дел (точно не уверен в этом):

<title><?PHP echo strip_tags(preg_replace('/<sup.*?>\s+[Tt][Mm]\s*</(sup|)>', '&trade;', $offer22name)); ?> is a magazine</title>

Вы можете заменить '&trade;' на '&#8482;', '&#x2122;' или '™', если хотите (но убедитесь, что кодировки соответствуют последней), в зависимости от ситуации.

2 голосов
/ 17 декабря 2008

Было бы очень просто (и, вероятно, желательно) использовать PHP-команду strip_tags (), чтобы удалить все html из вашей строки перед публикацией в качестве заголовка.

1 голос
/ 17 декабря 2008

Майк, я думаю, ты имел в виду это:

$title = preg_replace('|<sup>(.*?)</sup>|', '$1', $title);

То, как вы это делали раньше, печатает несколько слешей и скобок вокруг помеченного слова. Правильно?

pg, вы также можете просто сделать

$title = preg_replace('|<sup>(.*?)</sup>|', '', $title);

, если вы хотите полностью удалить надписанную информацию из заголовка.

1 голос
/ 17 декабря 2008

Регулярное выражение в PHP, которое заменит текст на (текст):

$title = preg_replace('|<sup>(.*?)</sup>|', '\($1\)', $title);

Было бы похоже сделать это в JavaScript.

1 голос
/ 17 декабря 2008

Одним словом, нет.

В идеале вы бы сделали $partnername22 = strip_tags('Discover<sup>tm</sup> Magazine'); (или что-то более причудливое), но если вы не можете этого сделать, то, боюсь, вы застряли с решением Javascript.

Что-то вроде:

window.title = window.title.replace(/<sup.*?</sup>/, '');
1 голос
/ 17 декабря 2008

Не AFAIK, но если вы уже пишете сценарий строки из БД, почему вы не можете написать сценарий регулярного выражения, заменив теги (или пары тегов, как вы хотите) пустыми строками?

0 голосов
/ 25 апреля 2016

Вы можете использовать кодировку символов вместо тега, например, &trade;, &#153;

0 голосов
/ 24 февраля 2009

Как насчет простого способа использования CSS?

h2.title sub, h2.title sup { vertical-align: baseline; font-size:100%; }
...