문제

누구든지 이것이 왜 작동하지 않는지 디코딩하도록 도와 줄 수 있습니까?

$cssid = preg_replace("/'/", "", $cssid);

일부 HTML에서 단일 견적 표시를 제거하려고합니다 ...

감사! 시간

편집 전체 기능입니다. 이미지를 사용하여 Drupal 메뉴를 재건하도록 설계되었으며 각 항목에 CSS 클래스를 적용하여 원하는 이미지를 선택할 수 있습니다. 공간과 apostrophes를 제거하거나 CSS 선택기가 실패해야합니다.

이 모든 문제를 일으키는 메뉴 항목의 제목은 다음과 같습니다.

What's new

당신이 생각할 것입니다. (그 싱글을 제외하고)

function primary_links_add_icons() {
  $links = menu_primary_links();
  $level_tmp = explode('-', key($links));
  $level = $level_tmp[0];
  $output = "<ul class=\"links-$level\">\n";   
  if ($links) {
    foreach ($links as $link) {
        $link = l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']);
        $cssid = str_replace(' ', '_', strip_tags($link));
        $cssid = str_replace('\'', '', $cssid);
        /*$link = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $link);*/
        $output .= '<li id="'.$cssid.'">' . $link .'</li>';
    };
    $output .= '</ul>';
  }
  return $output;
}

사가를 계속 편집 ...

phpmyadmin에서 다음과 같은 오류가 발생합니다.

MBString PHP 확장은 발견되지 않았으며 멀티 바이트 숯을 사용하는 것 같습니다. MBString 확장이 없으면 phpmyadmin은 문자열을 올바르게 분할 할 수 없으며 예상치 못한 결과를 초래할 수 있습니다.

이것이 그것과 관련이 있는지 궁금합니다.

어쨌든 SQL 코드는 다음과 같습니다.

('primary-links', 951, 0, 'http://www.google.com', '', 'What''s New',

그리고 이것은 다음과 같이 렌더링되면 Firebug에 표시됩니다.

<li id="What's_New">

나는 "What@s new"라는 메뉴 항목을 만들었고 str_replace ()는 그 일에 대해 잘 작동 하므로이 Goddam Apostrophe에 관한 것입니다. 나는 동의한다고 생각합니다. 표현은 효과가 있지만 인코딩 문제가되어야합니다. 그것은 실제로 적절하고 일반적인 아포스트로피이며 변형 중 하나가 아니지만 어떤 이유로 든 PHP는 그것을 인식 할 수 없습니다.

편집 오 하나님 오 신 - 다시 드 루 팔입니다 ... 모든 링크를 형식화하는 함수 L ()가 출력을 다시 작성하는 데 완전히 영향을 미치지 않는 것 같습니다! 어떤 경우이든이 코드는 작동합니다 ...

function primary_links_add_icons() {
  $links = menu_primary_links();
  $level_tmp = explode('-', key($links));
  $level = $level_tmp[0];
  $output = "<ul class=\"links-$level\">\n";   
  if ($links) {
    foreach ($links as $link) {
        $link['title'] = str_replace('\'', '', $link['title']);
        $link = l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']);
        $cssid = str_replace(' ', '_', strip_tags($link));      
        /*$link = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $link);*/
        $output .= '<li id="'.$cssid.'">' . $link .'</li>';
    };
    $output .= '</ul>';
  }
  return $output;
}

2 시간 후에이 사이트 테마를 계속할 수 있습니다 ...

모든 제안에 감사드립니다. 저는이 게시물의 Drupal 스 니펫 작가를 지적하겠습니다. 그래서 다른 사람들도 그로부터 혜택을받을 수 있기를 바랍니다.

도움이 되었습니까?

해결책

CSS 이미지 교체 메뉴 항목을 대체하기 위해 훨씬 더 일반적으로 선택된 방법입니다.

첫 번째 설치 : 메뉴 속성 모듈 모든 메뉴 항목에 대해 CSS ID를 분석 할 수 있습니다. (이 속성은 관리자 패널의 메뉴 항목 편집 페이지에서 설정할 수 있습니다)

그런 다음 CSS 이미지 교체를 사용하십시오. 여기 이것에 대한 좋은 튜토리얼입니다.

그리고 이것이 내 사이트에 사용하는 방법입니다.

    #primary-tv
{
    display: block;
    width: 90px;
    height: 0px;
    padding-top: 41px;
    background: url(images/nghtv.png);
}

이것은 90 x 41px의 이미지로 교체하기위한 예입니다.

그리고 아포스트로피 교체의 경우 :

$cssid = preg_replace("&#039;","",htmlspecialchars($cssid, ENT_QUOTES));

다른 팁

단일 인용문을 피하십시오.

코드는 괜찮아 보입니다. 하지만 왜 사용하지 않습니까? str_replace 고정 문자열을 교체 할 때?

$cssid = str_replace("'", "", $cssid);

만약에 str_replace("'","") 작동하지 않습니다. 제거하려는 캐릭터가 실제로 이상한 대안 ( ') 대신 정상적인 아포스트로피 (') 또는 이상한 악센트 마크 (```` 인용문 ( '') 또는 단일 따옴표 ( '')라고 확신합니다. 선반?

또는 아마도 가치 일 수도 있습니다 $cssid 다른 버그로 원본으로 다시 교체됩니까?

결과에 대한 잘못된 출력을보고 있습니까?

또는 훨씬 우연히, 당신은 편집중인 코드와 다른 코드의 사본을 실수로 실행하고 있습니까? :)

HTML이라는 점을 감안할 때 그것이 '가 아니라'로 표현 될 수 있다고 생각 했습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top