что не так в этом коде? - PullRequest
       25

что не так в этом коде?

0 голосов
/ 11 ноября 2009

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

это пример данных: -

<a href="#" onclick="sort_data('All','all')">All</a> | <a href="#" onclick="sort_data('Diversified','1')">Equity</a> | <a href="#" onclick="sort_data('Liquid','1')">Liquid</a> | <a href="#" onclick="sort_data('Sector','1')">Sector</a>

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

$links='<a href="#" onclick="sort_data('All','all')">All</a> | <a href="#" onclick="sort_data('Diversified','1')">Equity</a> | <a href="#" onclick="sort_data('Liquid','1')">Liquid</a> | <a href="#" onclick="sort_data('Sector','1')">Sector</a>
';
if(preg_match('/<A HREF="#" onclick="(.*?)>Equity/',$links))
{
    echo preg_replace('/<A HREF=(.*?)>Equity/','Equity',$links);
}

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

Ответы [ 4 ]

1 голос
/ 11 ноября 2009

Вы должны использовать флаг без учета регистра на preg_match и preg_replace . Также preg_match будет соответствовать только одной ссылке, если вам нужно заменить все ссылки, то preg_match_all будет лучше.

$links='<a href="#" onclick="sort_data(\'All\',\'all\')">All</a> | <a href="#" onclick="sort_data(\'Diversified\',\'1\')">Equity</a> | <a href="#" onclick="sort_data(\'Liquid\',\'1\')">Liquid</a> | <a href="#" onclick="sort_data(\'Sector\',\'1\')">Sector</a>
';
if(preg_match('/<A HREF="#" onclick="(.*?)>Equity/i',$links))
{
    echo preg_replace('/<A HREF=([^>]*)>Equity/i','<A $1>Equity',$links);
}

Примечание: Я не знаю, почему вы делаете это на стороне сервера, но может быть лучше сделать это на стороне клиента с помощью инфраструктуры JavaScript, jquery будет идеально делать такие манипуляции. Также вам лучше сделать не навязчивый javascript , который действительно лучше для обслуживания,

0 голосов
/ 11 ноября 2009

В вашем коде есть несколько недостатков:

  1. Вы ищете заглавные буквы, хотя вы использовали строчные буквы. Чтобы исправить это, используйте параметр i (без учета регистра) или измените значение reg exp.
  2. Вы забыли закрывающий тег </a>.
  3. Жадный * будет использовать каждую ссылку перед найденной.
  4. (Возможно, ветвь if не нужна, если вы хотите продолжать использовать манипулированную строку.)

Попробуйте это:

$links='<a href="#" onclick="sort_data('All','all')">All</a> | <a href="#" onclick="sort_data('Diversified','1')">Equity</a> | <a href="#" onclick="sort_data('Liquid','1')">Liquid</a> | <a href="#" onclick="sort_data('Sector','1')">Sector</a>';
if(preg_match('/<A([^<>]*)>Equity</A>/i',$links)) {
    echo preg_replace('/<A([^<>]*)>Equity</A>/i','Equity',$links);
}
0 голосов
/ 11 ноября 2009

Если все, что вы хотите сделать, это избавиться от тегов <A HREF=...> и </A>, почему бы не использовать функцию strip_tags ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...