2015-08-11 2 views
0

Я попытался построить FDF-файл в php, но у меня проблемы с «< <». Немного странно «< <« все было до того, как строка удалена. Я знаю, что этот символ является оператором, но как я могу использовать его для построения строки сейчас?Как предотвратить, что «<<» разбивает строку

вот мой код:

$fdf = '%FDF-1.2 
1 0 obj<</FDF<< /Fields['; 

    $fields = ""; 

    foreach($dataContainer as $data) 
    { 
     if(array_key_exists($data['fieldname'], $this->fieldSet)) 
     { 
      $field = '('.$data['fieldname'].')'; 
      $value = '('.$data['content'].')'; 

      $fields.='<</T'.$field.'/V'.$value.'>>'; 

      echo $fields." ".$data['fieldname']."<br />"; 
     } 
    } 

    $fdf.= $fields; 
    $fdf.= '] >> >> 
endobj 
trailer 
<</Root 1 0 R>> 
%%EOF'; 

и выход:

< 
<> 
<><> 
<><><> 
<><><><> 

ли кто-либо решение для этого?

+1

Добавить 'htmlentities()' вокруг каждой строки с символами <> – SuperDJ

+0

Вау действительно спасибо. Пожалуйста, поместите свой комментарий в качестве ответа, чтобы я мог принять это как правильно. –

+0

Это только для визуализации вывода в контексте * text/html' webpage. Если вы пытались создать PDF вручную, оставьте его в покое и используйте соответствующий тип MIME или сохраните его в файле. – mario

ответ

0

Добавление htmlentities() вокруг строки с <, > символов должны исправить вашу проблему:

$fdf = '%FDF-1.2 
1 0 obj<</FDF<< /Fields['; 

    $fields = ""; 

    foreach($dataContainer as $data) 
    { 
     if(array_key_exists($data['fieldname'], $this->fieldSet)) 
     { 
      $field = '('.$data['fieldname'].')'; 
      $value = '('.$data['content'].')'; 

      $fields.='<</T'.$field.'/V'.$value.'>>'; 

      echo $fields." ".$data['fieldname']."<br />"; 
     } 
    } 

    $fdf.= $fields; 
    $fdf.= '] >> >> 
endobj 
trailer 
<</Root 1 0 R>> 
%%EOF'; 

$fdf = htmlentities($fdf); // Adding it here would make sure every <, > is replaced 
1

Ваш PDF прекрасно, нет ничего плохого в << или что-нибудь еще в коде. Единственная проблема заключается в том, что вы, вероятно, сбрасываете созданный PDF-контент напрямую, и, поскольку никто не говорит об этом иначе, браузер пытается интерпретировать его как HTML.

Решение очень простое: использование функции header() перед выводом в PDF, чтобы сообщить браузеру правильный тип контента, который вы отправить:

header('Content-Type: application/pdf'); 
// ... Generate the PDF here 
// ... and output it 
echo($fdf); 

Это все. Теперь браузер знает, что тело ответа не является HTML, и оно не будет пытаться отображать его, за исключением случаев, когда он знает, как читать PDF (что, по-видимому, делает последние версии Firefox и Chrome).

В зависимости от браузера и его настроек он либо отображает предоставленный PDF-материал (как он появился на бумаге при печати), либо откроет программу просмотра PDF по умолчанию, установленную на компьютере (Adobe Acrobat Reader, fe) или спросит, где его сохранить, или он спросит, что из вышеперечисленного делать.

Смежные вопросы