preg_replace () str_replace () apostrophe 악몽! - 드 루 팔 메뉴 이미지 교체
-
05-07-2019 - |
문제
누구든지 이것이 왜 작동하지 않는지 디코딩하도록 도와 줄 수 있습니까?
$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("'","",htmlspecialchars($cssid, ENT_QUOTES));
다른 팁
단일 인용문을 피하십시오.
코드는 괜찮아 보입니다. 하지만 왜 사용하지 않습니까? str_replace
고정 문자열을 교체 할 때?
$cssid = str_replace("'", "", $cssid);
만약에 str_replace("'","")
작동하지 않습니다. 제거하려는 캐릭터가 실제로 이상한 대안 ( ') 대신 정상적인 아포스트로피 (') 또는 이상한 악센트 마크 (```` 인용문 ( '') 또는 단일 따옴표 ( '')라고 확신합니다. 선반?
또는 아마도 가치 일 수도 있습니다 $cssid
다른 버그로 원본으로 다시 교체됩니까?
결과에 대한 잘못된 출력을보고 있습니까?
또는 훨씬 우연히, 당신은 편집중인 코드와 다른 코드의 사본을 실수로 실행하고 있습니까? :)
HTML이라는 점을 감안할 때 그것이 '가 아니라'로 표현 될 수 있다고 생각 했습니까?