는 방법을 결정하는 경우에 html 태그에 여러 줄에 걸쳐 분할
문제
쓰 PHP 스크립트를 포함하는 긁 웹 페이지입니다.현재 스크립트 분석은 페이지를 줄이지만,그것은 휴식이 있는 경우 프로그래밍 인터페이스를 제공하는 걸쳐 여러 줄처럼,
<img src="example.jpg"
alt="example">
면 더 온다 최악,나도 전처리 페이지를 제거하여 모든 라인에 나누기,그리고 다시 삽입하기에 가장 가까운 >
, 하지만 이처럼 보인다는 임시방편 보.
이상적으로,나는 감지할 수 있는 태그에 걸쳐 있는 라인,conjoin 만을 줄이고 계속 처리합니다.
그래서 무엇이 가장 좋은 방법을 감지하는 이?
해결책 4
아마도 미래를 위해 프로젝트가 사용하여 파싱 라이브러리,그러나 그 종류의 고객께서 질문합니다.이것은 현재 솔루션입니다. rstrpos
은 strpos 지만,반대 방향입니다.를 들어 사용:
for($i=0; $i<count($lines); $i++)
{
$line = handle_mulitline_tags(&$i, $line, $lines);
}
그리고 여기에는 구현:
function rstrpos($string, $charToFind, $relativePos)
{
$searchPos = $relativePos;
$searchChar = '';
while (($searchChar != $charToFind)&&($searchPos>-1))
{
$newPos = $searchPos-1;
$searchChar = substr($string,$newPos,strlen($charToFind));
$searchPos = $newPos;
}
if (!empty($searchChar))
{
return $searchPos;
return TRUE;
}
else
{
return FALSE;
}
}
function handle_multiline_tags(&$i, $line, $lines)
{
//if a tag is opened but not closed before a line break,
$open = rstrpos($line, '<', strlen($line));
$close = rstrpos($line, '>', strlen($line));
if(($open > $close)&&($open > -1)&&($close > -1))
{
$i++;
return trim($line).trim(handle_multiline_tags(&$i, $lines[$i], $lines));
}
else
{
return trim($line);
}
}
이마에서 최적화 방법,그러나 내 목적을 위해,그것이면 충분합니다.
다른 팁
이것은 하나 내가 싫어: 지 분석 HTML 있습니다. 지 분석 HTML 와 regexps. 지 분석 HTML 문자열 비교할 수 있습니다. 상 사용 HTML 파서 분석하 HTML 는 사람들이 거기에 겁니다.
그것은 긴 시간 때문에 나는 모든 PHP,하지만 빠른 검색 설정 이 PHP5HTML 파서.
쓰지 않는 파서,다른 사람의 사용: DOMDocument::loadHTML -는 한,내가 생각하는 많은 다른 사람입니다.
론,이하지 않는 질문에 대답하고 더 많은 의견,하지만...
내가 생각하는 최고의 긁는 전략(와 결과적으로 이 문제를 해결하기 위해)지 않을 분석 HTML 라인에 의해 라인에 자연 HTML 지만,그것을 분석하여 그것의 자연적인 구분 기호:<>쌍이다.
가 될 것이 두 가지 유형의 코스:
- 태그는 요소는 바로 폐쇄로,예를 들어, < br/>
- 태그는 요소가 필요한 별도의 닫는 태그의 예를 들어, < p>텍스트 < /p>
즉시 확인할 수 있습의 장점은 사용하는 이 전략의 경우에 단락(p)태그:그것을 쉽게 될 것입니다 분석 mutiline 단락의 위치 추적을 닫는 태그이다.
왜 당신은에서 읽을 줄이고,설정 문자열을 확인한 후 문자열 태그의 구멍과 폐쇄면,태그를 더 걸쳐 다음 중 하나는 라인에 추가가 다음 줄을 문자열 및 이동에 앞 부분 개방 중괄호를 처리하는 문자열.음 분석을 통해 파일 전체 이것을 하고 있다.아름다운하지 않지만 작업해야 합니다.
는 경우에 당신은 꼭 스틱을하는 현재의 방법을 구문 분석,그리고 정규식,사용할 수 있습니다 multi-line flag "m"에 걸쳐 여러 줄에 걸쳐.