2013-08-14 2 views
0

가짜 내용을 데이터베이스의 텍스트 필드로 일괄 가져 오는 작업을 돕기 위해 프로젝트 용 컨텐츠 생성 도구를 작성했습니다. 사이트의 모습을 보일뿐입니다.무작위로 html 문자열을 html 문자열에 삽입하는 방법

저는 실제로 삽입하는 문자열을 생성하기 위해 lorem-php-sum이라는 외부 클래스를 사용하고 있습니다. 그것의 믿을 수 없을만큼 간단하게, 그냥 텍스트를 <p> 태그 (그리고 매번 그들의 임의의 숫자)에 싸서 단락을 삽입하고 난 다음 큰 루프 내 선택한 테이블에 이러한 문자열을 삽입합니다.

이제는 내용이 무작위로 생성되고 HTML 태그, 가로줄 태그 및 기타 항목을 추가하고 싶습니다. 이 단락 생성기 클래스에서 반환 된 단락 내에 임의로 배치 할 새 HTML 요소를 원합니다.

문제점은 임의의 지점에서 큰 단락 문자열에 목록 태그를 쉽게 삽입 할 수있는 반면에 때로는 html을 깨뜨리는 방식으로 기존 마크 업 내에 새로운 html 태그를 삽입 할 수 있다는 두려움이 있습니다.

누군가 다른 규칙에 html을 삽입하는 트릭이 있습니까? php domDocument 클래스가이 문제를 해결할 수 있다고 생각하지만 지금은 확실하지 않습니까?

답변

0

발전기에 일종의 상태 시스템을 통합해야합니다.

이 같은 것을 생각할 수 있습니다 :

1 단계가하십시오 textnode, 단락, 목록 노드 : 렌더링 할 요소를 선택합니다.

당신은, 당신은 무작위로 텍스트를 생성하고 당신이 <p>을 방출 단락을 선택하고 텍스트를 생성 할 때 1.

단계로 돌려 textnode을 선택 </p>을 내고 1.

단계로 돌아 가면 목록 노드의 경우에만 목록 요소 <li>을, 그래서 요소의 임의의 숫자를 선택하고 1 단계

에서 동일한 규칙을 채울 수 -

중첩을 허용 할 수도 있습니다. <li>에서 <strong><em>을 추가 할 수 있으며 <p>과 유사합니다. 당신은 내가

:이 계수 조금 좋은 결과를 얻을 수 조정할 생각 원하는

당신은 미친 만들 수 있습니다. 무작위이지만 예측 가능한 출력을 생성하는 생성기를 만들려고 시도하면 전체 길이를 제어하는 ​​것이 좋습니다.

+0

안녕하세요. domDocument로 이것을 달성 할 수 있습니까? – AdamJones

+0

아니요, 필요 없습니다. 당신은 단지 문자열을 생성하는 것입니다. – Halcyon

0

다차원 배열을 계층 적으로 반복 할 수 있습니다. 행이없는 셀은없고 테이블이없는 행은 없습니다.

$tags = array("<table>%s</table>\n" , 
       array (" <tr>%s</tr>\n" , 
        array(" <td>%s</td>\n)), 
       "<ul>%s</ul>\n", 
       arrray (" <li>%s</li>\n") //continue with more tags 
     ); 
$tags_simple = array("%s", "<strong>%s</strong>", 
        "<i>%s</i>", "<p>%s</p>\n", "%s</ br>\n" 
        ); //etc, "%s" for a none tag, add more if you like 

는 임의의 문장의 sprintf,이를 멀티 루프, $ 태그에서 ramdom를 선택하고 그들에게 무작위로 간단한 태그를 추가 할 수 있습니다. 독립형 가능성이 있습니다.

0

다른 코드 샘플과 domDocument를 사용하여이 작업을 처리했습니다. 단락 태그를 통해 문자열을 폭발시키는 함수를 작성하고 각 단락을 개별 항목으로 포함하는 배열로 반환합니다.

function splitTextByPara($string,$split_on="p"){ 
// Add alternative tags to split on with syntax: |//ul|//br 

$dom = new DOMDocument(); 
$dom->loadHTML($string); 
$domx = new DOMXPath($dom); 
$entries = $domx->evaluate("//".$split_on); 
$result = array(); 
foreach ($entries as $entry) { 
    $result[] = $entry->ownerDocument->saveHTML($entry); 
} 

// re-encode to utf8 
$result = array_map("utf8_decode", $result); 

return $result; 
} 
관련 문제