2012-01-22 3 views
0

사람들이 웹 페이지 콘텐츠/텍스트 요법에서 실제 URL을 가져와 이미지를 추출하는 방법을 묻는 경우 많은 답변을 보았습니다. 그러나 내 데이터베이스에서는 슬프게도 이걸 가지고 있습니다. 구문 :PHP가 텍스트 파일에서 이미지를 가져 오는 패턴과 일치합니다.

<img class="photo" src="http://domain.com/image.jpg" alt="alt goes here" /> 

그래서, 일반적인 방법으로 $pattern = '/src=["|\']([^"|\']+)/is'; 인해 그 "에 내 경우에는 작동하지 않습니다 ... , 난 아주 아주 잘못된 일을해야 시간 동안 노력 해왔다 ... 어떤 도움이다 매우 감사!

+0

왜 먼저'모든 것을, 다음 정규식을 사용 str_replace'하지 않는 출력? –

+0

'str_replace'가 안전하지 않으므로? ** PHP가 HTML 함수를 호출하는 것만으로도 PHP에서 HTML 디코더와 파서를 쓰는 것이 왜 어려운가요? ** – Christian

+0

@ChristianSciberras - 당신이 저를 오해 한 것 같습니다 : 나는 [str_replace를 먼저 실행해야한다고 그의 문자열] (http://codepad.org/QekMM6IG), 그 다음 그의 정규 표현식을 사용하십시오! –

답변

1

정규 표현식!

Simple HTML DOM과 같은 XML/DOM 라이브러리를 사용하십시오. 여기

을 테스트하는 간단한 프로그램입니다 :

은 BTW, 당신이 찾고있는 정규 표현식

$pattern = '/src=(["\'])(.+)(?=\1)/i'; 


테스트 케이스 (선택 사항)입니다. 분명히 엔티티 형식에서 먼저 디코드하려면 htmlspecialchars_decode()을 사용해야합니다.

$str = array(
    "<script type=\"text/javascript\" src=\"script.js\"></script>", 
    "<script type=\"text/javascript\" src='script.js'></script>", 
    '<script type="text/javascript" src="script.js"></script>', 
    '<script type="text/javascript" src=\'script.js\'></script>', 
); 
$pattern = '/src=(["\'])(.+)(?=\1)/i'; 

foreach($str as $s){ 
    preg_match($pattern, $s, $m); 
    echo $m[2], PHP_EOL; 
} 

script.js 
script.js 
script.js 
script.js 
+0

@mario 알 겠어, 내 실수. 정규 표현식의 또 다른 사례라고 생각했습니다. – Christian

+0

오키. OP에 따라 질문을 업데이트하십시오. @ 마리오. –

+0

감사합니다 모두들, 내가 htmlspecialchars_decode에 대한 조언을 따라하고 마지막으로 유효한 이미지 URL을가집니다! 'if (preg_match ($ pattern2, htmlspecialchars_decode ($ ck [ 'post']), $ found_img))' – Andrew

0

현재 정규식을 테스트 할 수 있습니다 무엇을 작동하지 않습니다

http://gskinner.com/RegExr/

?

+0

먼저 이중 따옴표는 다른 특수 문자와 마찬가지로 '"'으로 변환됩니다. 둘째,'preg_match' *는 분명히 여기 해결책이 아닙니다 *. – Christian

+0

@ChristianSciberras, 알았습니다. 원래 게시물에서 인코딩을 보지 못했습니다. 좋은 대답! – mowwwalker

2

우선 '일반적인 방법'은 정규 표현식이 아닌 HTML/XML 구문 분석기를 사용하는 것입니다. (이 사실 HTML 코드에있을 때 왜 HTML 텍스트로 인코딩)

  • 그것은 더 이상 HTML 아니에요 :

    둘째, 당신이해야하는 것은 두 가지 이유에서 심하게 냄새가 HTML 텍스트로 인코딩 된 HTML 코드는 ?

  • HTML을 DB에 저장하기 전에 인코딩하지 말고 사용자에게 쓰는 것이 좋습니다. 나이에 말했다

    $stuff = '&lt;img class=&quot;photo&quot; src=&quot;http://domain.com/image.jpg&quot; alt=&quot;alt goes here&quot; /&gt;'; 
    $code = htmlspecialchars_decode($stuff, ENT_QUOTES); 
    $xml = simplexml_load_string($code); 
    

    심하게 해결하기 위해 해킹 같은 소리 : 당신이해야 할 일을 제쳐 놓고이 두 가지 문제와

는 그 물건을 htmlspecialchars_decode()과 HTML 파서를 통해 전달하는 것입니다 작성된 코드. 그러나 그것이 처음부터 있었던 이유는 틀림 없습니다.

+0

'< IMG 클래스 = " 사진 "는 SRC = " http://domain.com/image.jpg " 고도 = " 고도는 "/> 간다 ','천 개 다른 URL을 발견하는 방법을 보여 더미 샘플입니다 내 데이터베이스에. 내 문제는 매번 실제 이미지 위치를 분리하는 것입니다. – Andrew

+0

@ 앤드류 저의 지적은 데이터베이스에있는 것들이 올바르게 수행되지 못했다는 것입니다. 우선 HTML을 HTML 텍스트로 인코딩하지 않습니다. 둘째, 데이터베이스는 데이터가 아닌 열과 표로 나뉘어 질 때 가장 잘 작동합니다. 그럼에도 내 코드를 사용하여 원하는대로 할 수 있습니다. – Christian

+0

@Christian Sciberras, 고맙다. 내 코드가 아니다. 전문가가 아니다. 구입 한 것을 고치려고하는 초보자는 의도 한대로 작동하지 않는다. DB 타입의 이런 유형의 Invision IPB를 비난한다. 이 모든 일은 승인 된 사용자가 html을 게시 할 때 발생합니다 (html을 게시물에 직접 게시 할 수있는 경우). 나는 내 손에 이런 상황을 가지고 있으며, 그런 일은 바꿀 수 없다. 그걸 다루어야하고 이미지 URL을 인식하는 정규 표현식을 찾으십시오 :) – Andrew

관련 문제