2013-03-11 12 views
1

에서 젠드 텍스트 영역에 큰 텍스트를로드하는 textarea는 데이터베이스 레코드에서이내가 채우기 위해 노력하고 데이터베이스

$this->addElement('textarea', 'body', array(
    'label' => $translate->translate('Contents:'), 
    'cols' => '80', 
    'rows' => '24', 
    'required' => true 
)); 

같이 정의. 이 레코드는 UTF-8로 페이지의 HTML 텍스트를 포함하는 BLOB입니다.

$form->populate(array(
    // ... 
    'body' => 
    str_replace("\\n", "\n", 
     html_entity_decode(
     $page['body'] 
    ) 
    ), 
    // ... 
)); 

불행히도 텍스트의 길이가 2934 바이트보다 큰 경우 필드는 전혀 채워지지 않습니다.

'maxlength' => '4096', 

을 설정하여 maxlength을 설정하려고했지만 아무런 효과가없는 것으로 보입니다.

이제 웹에서 찾을 수있는 것부터 textarea 한계는 2934 바이트보다 커야하며 30-60KB에 가깝습니다. 필드를 두 개의 개별 폼 요소로 분리하는 것 외에는이 문제를 어떻게 해결할 수 있습니까?

업데이트 범인 문자 "ß는"였습니다 두 개의 문자, "A"로 데이터베이스에서 인코딩 된 것 같다. 그 문자의 첫 번째 발생은 텍스트 내의 2934 위치에 있으므로 2 바이트 표현의 두 번째 문자는 어떻게 든 필드를 완전히 수신하지 못하게합니다.

+1

문제가 데이터베이스에서 blob을 제거하지 못하고 있습니까? 문제가 그럴 것 같고 많은 데이터를 가져 오기 위해 양식 요소를 가져 오는 것이 아닙니다. – ficuscr

+0

아니요, 나는 텍스트가 데이터베이스에서 검색되고 있다는 긍정적 인 이유는 다음과 같은 두 가지 이유 때문입니다. 1) 성공을 통해 명백하게 'echo'시도했습니다. 2) substr ($ page [ 'body'], 1 , 2934)'대신 양식 요소가 제대로 채워집니다. 'substr ($ page [ 'body'], 1, 2935)'이미 그것이 아닙니다. – Vilinkameni

+0

텍스트 영역에 HTML 침투 ... 페이지 소스를 보면 거기에 모든 것이 있습니까? WYSIWYG 편집기를 사용하거나'htmlentitites()'를 통해 실행해야 할 수도 있습니다. 참조 : http://stackoverflow.com/questions/3777297/php-html-form-textarea-containing-html – ficuscr

답변

0

질문에 대한 업데이트에서 설명한 것처럼 범죄자는 "ß"문자로 데이터베이스에 두 개의 문자 "Ã "로 인코딩되어 있습니다. 그 문자의 첫 번째 발생은 텍스트 내의 2934 위치에 있었으므로 2 바이트 표현의 두 번째 문자가 어떻게 든 필드를 완전히 수신하지 못하게되었습니다. ficuscr 자신의 의견에서 지적

으로, 어떤 텍스트를 손상하는 것은 str_replace 함수를 호출했다. preg_replace에 대한 호출로 바꾸면 텍스트가 데이터베이스에 제대로 저장되고 필드가 전체 텍스트를 받았습니다.

관련 문제