phpword 플러그인_php 팁을 사용하여 단어 파일을 내보낼 때 중국어 문자가 깨지는 문제에 대한 해결 방법
Word 문서를 내보내려면 PHP 기술을 사용해야 하는 최근 프로젝트 개발 중 첫 번째는 Word.Application과 같은 Microsoft Office와 함께 제공되는 ActiveX/COM 구성 요소를 사용하는 것이었습니다. 형식 호환성이 높으며 순수한 doc Word2003 형식 문서를 생성할 수 있습니다. 단점은 더 많은 리소스를 차지하며(호출 시 WINWORD.EXE 프로세스가 시작됨) 웹에서 다중 사용자 액세스에 적합하지 않다는 것입니다. 물론 PHP 등 대부분의 웹 개발 기술은 리눅스 서버에서 구동되기 때문에 윈도우 환경에서는 사용이 불가능하고 플랫폼 이식성과 호환성도 좋지 않다.
Word를 생성하는 두 번째 방법은 Word 호환 웹 페이지 형식을 생성한 다음 Word에서 여는 것입니다. 이 솔루션은 전체적으로 이상한 느낌이 듭니다. 결국 파일 형식이 HTML이고 형식 호환성이 좋지 않습니다. 하지만 이 방법의 장점은 서버 리소스를 절약하고 빠르게 생성할 수 있다는 것입니다. 마지막 솔루션은 PHPWord를 사용하여 Word2007(docx) 형식으로 문서를 생성하는 것입니다. 이제 기본적으로 Microsoft Office Word 2003 및 이후 버전과 호환됩니다. 2003 버전의 경우 호환되는 형식의 패키지(다운로드 주소)만 다운로드하여 설치하면 되며, 물론 최신 버전의 Office를 사용하는 경우에도 해당 파일을 정상적으로 열 수 있습니다. Office 2007, Office 2010으로 제한됨), 이 형식 패키지를 설치할 필요가 없습니다.
자, 이제 PHPWord를 소개하겠습니다. 프로젝트 홈페이지에 방문하시면 다운로드 받으실 수 있으며, 프로젝트에 대한 자세한 정보를 얻으실 수 있습니다.
저는 주로 사용 중 중국어 깨짐 문제가 발생했습니다. 온라인 전문가의 지도를 바탕으로 다음과 같은 방법을 통해 이러한 문제를 해결했습니다.
1. 동아시아 글꼴 지원 추가
/Writer/Word2007/Base.php 파일 경로(아마도 349행)의 내용을 열고 편집하고(행 수는 버전에 따라 변경될 수 있음) _writeTextStyle 함수에
을 추가합니다.$objWriter->writeAttribute('w:eastAsia', $font)
예를 들어 제가 수정한 부분은 기본적으로 다음과 같습니다.
// Font if($font != 'Arial') { $objWriter->startElement('w:rFonts'); $objWriter->writeAttribute('w:eastAsia', $font); // 添加这行 $objWriter->writeAttribute('w:ascii', $font); $objWriter->writeAttribute('w:hAnsi', $font); $objWriter->writeAttribute('w:cs', $font); $objWriter->endElement(); }
2. 한자 깨짐 문제 해결
PHPWord/Template.php를 편집하고 $replace = utf8_encode($replace); 코드를 찾은 다음 이 코드 줄을 삭제하거나 주석 처리하고 $replace = iconv('gbk','utf-8', $를 추가합니다. 교체); 예를 들어 코드는 다음과 같이 변경됩니다.
/** * Set a Template value * * @param mixed $search * @param mixed $replace */ public function setValue($search, $replace) { if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') { $search = '${'.$search.'}'; } if(!is_array($replace)) { //$replace = utf8_encode($replace); $replace =iconv('gbk', 'utf-8', $replace); // 注释掉上面行后添加这行 } $this->_documentXML = str_replace($search, $replace, $this->_documentXML); }
호출 방법은 다음과 같습니다.
$document->setValue('Template', iconv('utf-8', 'GB2312//IGNORE', '中文'));
위의 코드는 주로 템플릿의 문제를 해결합니다. 아래와 같은 이유로 섹션에 텍스트를 추가하는 문제를 해결합니다. $givenText = utf8_encode($text); 코드를 찾아 이 코드 줄을 삭제하거나 주석 처리한 후 추가합니다. $givenText = iconv( 'gbk', 'utf-8', $text); 예를 들어 코드는 다음과 같습니다.
/** * Add a Text Element * * @param string $text * @param mixed $styleFont * @param mixed $styleParagraph * @return PHPWord_Section_Text */ public function addText($text, $styleFont = null, $styleParagraph = null) { //$givenText = utf8_encode($text); $givenText = iconv('gbk', 'utf-8', $text); // 注释掉上面行后添加这行 $text = new PHPWord_Section_Text($givenText, $styleFont, $styleParagraph); $this->_elementCollection[] = $text; return $text; }
호출 방법은 위의 템플릿 호출과 유사하므로 여기서는 나열하지 않겠습니다.
많은 고민 끝에 갑자기 인터넷에 다른 버전의 PhpWord가 있다는 것을 알게 되었습니다. 프로젝트 클래스 이름은 대문자와 대문자가 약간 다릅니다. 그것은 PHPOffice/PHPWord와 GitHub 프로젝트 주소(문서)에 속합니다. 이 버전의 PHPWord에는 더 풍부한 콘텐츠가 있으며 더 많은 기능(줄 간격, 들여쓰기, 첫 줄 들여쓰기 등 포함)을 지원합니다. 마지막으로 이 버전의 PHPWord도 API 인터페이스라는 점에 주목할 가치가 있습니다. 기본적으로 동일하며 보편적으로 사용할 수 있습니다. 그러나 일부 API는 PHPOffice/PHPWord에서 권장되지 않습니다. 예를 들어 createSection을 addSection으로 변경해야 합니다. 또한 이 버전의 PHPWord를 적용하면 위와 같이 중국어 지원 수정이 필요하지 않으므로 문제가 더 발생하지 않습니다.
이 두 PHPWord 프로젝트 관계자는 더 자세한 사용 예와 문서를 제공했지만 여기서는 소개하지 않습니다. 마지막 알림은 템플릿 모드에서 loadTemplate은 setValue와 같은 템플릿 작업 메서드만 사용할 수 있으며 단락을 추가하거나 수정할 수 없다는 것입니다. 이것은 약간 불편합니다.
PHPOffice/PHPWord의 경우 참조용으로 간단한 예를 제공합니다(물론 공식적인 예도 더 있습니다).
require_once 'PhpOffice/PhpWord/PhpWord.php'; // 包含头文件 use PhpOffice\PhpWord\Autoloader; use PhpOffice\PhpWord\Settings; use PhpOffice\PhpWord\IOFactory; require_once __DIR__ . '/PhpOffice/PhpWord/Autoloader.php'; Autoloader::register(); Settings::loadConfig(); // Create a new PHPWord Object $PHPWord = new \PhpOffice\PhpWord\PhpWord(); $PHPWordHelper= new \PhpOffice\PhpWord\Shared\Font(); $PHPWord->setDefaultFontName('仿宋'); // 全局字体 $PHPWord->setDefaultFontSize(16); // 全局字号为3号 // 设置文档的属性,这些在对文档右击属性可以看到,也可以省去这些步骤 $properties = $PHPWord->getDocumentProperties(); $properties->setCreator('张三'); // 创建者 $properties->setCompany('某公司'); // 公司 $properties->setTitle('某某文档'); // 标题 $properties->setDescription('http://wangye.org'); // 描述 $properties->setLastModifiedBy('李四'); // 最后修改 $properties->setCreated( time() ); // 创建时间 $properties->setModified( time() ); // 修改时间 // 添加3号仿宋字体到'FangSong16pt'留着下面使用 $PHPWord->addFontStyle('FangSong16pt', array('name'=>'仿宋', 'size'=>16)); // 添加段落样式到'Normal'以备下面使用 $PHPWord->addParagraphStyle( 'Normal',array( 'align'=>'both', 'spaceBefore' => 0, 'spaceAfter' => 0, 'spacing'=>$PHPWordHelper->pointSizeToTwips(2.8), 'lineHeight' => 1.19, // 行间距 'indentation' => array( // 首行缩进 'firstLine' => $PHPWordHelper->pointSizeToTwips(32) ) ) ); // Section样式:上3.5厘米、下3.8厘米、左3厘米、右3厘米,页脚3厘米 // 注意这里厘米(centimeter)要转换为twips单位 $sectionStyle = array( 'orientation' => null, 'marginLeft' => $PHPWordHelper->centimeterSizeToTwips(3), 'marginRight' => $PHPWordHelper->centimeterSizeToTwips(3), 'marginTop' => $PHPWordHelper->centimeterSizeToTwips(3.5), 'marginBottom' => $PHPWordHelper->centimeterSizeToTwips(3.8), 'pageNumberingStart' => 1, // 页码从1开始 'footerHeight' => $PHPWordHelper->centimeterSizeToTwips(3), ); $section = $PHPWord->addSection($sectionStyle); // 添加一节 // 下面这句是输入文档内容,注意这里用到了刚才我们添加的 // 字体样式FangSong16pt和段落样式Normal $section->addText('文档内容', 'FangSong16pt', 'Normal'); $section->addTextBreak(1); // 新起一个空白段落 $objWriter = IOFactory::createWriter($PHPWord, 'Word2007'); $objWriter->save('/path/to/file'); // 保存到/path/to/file路径下
요약
1. 템플릿 단어를 사용하여 중국어 왜곡된 단어 솔루션 생성: phpword/Template.php 파일을 열고 $replace = utf8_encode($replace)를 찾아 $replace =iconv('gbk', 'utf-8) ', $replace) 그게 다입니다.
2. 단어 문서를 직접 생성합니다. addText 개체를 호출할 때 중국어 문자가 깨졌을 때 해결 방법: phpword/Section.php 파일을 열고 $givenText = utf8_encode($text)를 찾습니다. gbk', 'utf-8', $text); 그게 다입니다.
3. 다른 방법에도 비슷한 해결책이 있는 것 같습니다.
4. php 파일은 gbk를 사용합니다. 어쨌든 내 것은 중국어를 표시합니다. 오랫동안 온라인에서 검색하고 오랫동안 조사한 끝에 마침내 알아냈습니다.

phpsessionscanstorestrings, 숫자, 배열 및 객체 1.Strings : TextDatalikeUsernames.2.numbers : integorfloatsforcounters.3.arrays : listslikeshoppingcarts.4.objects : complexStructuresThatareserialized.

세션 재생은 세션 고정 공격의 경우 사용자가 민감한 작업을 수행 할 때 새 세션 ID를 생성하고 이전 ID를 무효화하는 것을 말합니다. 구현 단계에는 다음이 포함됩니다. 1. 민감한 작업 감지, 2. 새 세션 ID 생성, 3. 오래된 세션 ID 파괴, 4. 사용자 측 세션 정보 업데이트.

PHP 세션은 응용 프로그램 성능에 큰 영향을 미칩니다. 최적화 방법은 다음과 같습니다. 1. 데이터베이스를 사용하여 세션 데이터를 저장하여 응답 속도를 향상시킵니다. 2. 세션 데이터 사용을 줄이고 필요한 정보 만 저장하십시오. 3. 비 차단 세션 프로세서를 사용하여 동시성 기능을 향상시킵니다. 4. 사용자 경험과 서버 부담의 균형을 맞추기 위해 세션 만료 시간을 조정하십시오. 5. 영구 세션을 사용하여 데이터 읽기 및 쓰기 시간의 수를 줄입니다.

phpsessionsareser-side, whilecookiesareclient-side.1) sessions stessoredataontheserver, andhandlargerdata.2) cookiesstoredataonthecure, andlimitedinsize.usesessionsforsensitivestataondcookiesfornon-sensistive, client-sensation.

phpidifiesauser의 sssessionusessessioncookiesandssessionids.1) whensession_start () iscalled, phpgeneratesauniquessessionStoredInacookienamedPhpsSessIdonSeuser 'sbrowser.2) thisidallowsphptoretrievessessionDataTromServer.

PHP 세션의 보안은 다음 측정을 통해 달성 할 수 있습니다. 1. Session_REGENEREAT_ID ()를 사용하여 사용자가 로그인하거나 중요한 작업 일 때 세션 ID를 재생합니다. 2. HTTPS 프로토콜을 통해 전송 세션 ID를 암호화합니다. 3. 세션 _save_path ()를 사용하여 세션 데이터를 저장하고 권한을 올바르게 설정할 보안 디렉토리를 지정하십시오.

phpsessionfilesarestoredInTheRectorySpecifiedBysession.save_path, 일반적으로/tmponunix-likesystemsorc : \ windows \ temponwindows.tocustomizethis : 1) austession_save_path () toSetacustomDirectory, verlyTeCustory-swritation;


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
