찾다
백엔드 개발PHP 튜토리얼TP의 모듈은 중국어를 지원합니다

www.xxx.com/Guangzhou/xx와 같은 URL이 중국어를 지원하려면 캡처된 광저우/xxxx를 emptyAction에서 처리해야 합니다. 그러나 TP의 기본 모듈 이름은 중국어를 지원하지 않습니다. 따라서 TP 프레임워크의 PHP 코어 파일을 수정해야 합니다:
App.class.php
수정된 코드:

Java 코드

/** 
     * 执行应用程序 
     * @access public 
     * @return void 
     */  
    static public function exec() {  
        if(!preg_match('/^[A-Za-z](\w)*$/',MODULE_NAME) ){ // 安全检测  
            $module  =  false;  
        }else{  
              
            //创建Action控制器实例  
            $group   =  defined('GROUP_NAME') && C('APP_GROUP_MODE')==0 ? GROUP_NAME.'/' : '';  
            //$module  =  A($group.MODULE_NAME);  
  
              
            if(preg_match("/[\x7f-\xff]/", MODULE_NAME)){//中文模式  
                if(in_array(MODULE_NAME,C('CHINESE_MODULE_NAME'))){ //在指定的中文內  
                    $module  =  A($group.'isTheEmpty');  
                }else{  
                    _404(L('_MODULE_NOT_EXIST_').':'.MODULE_NAME);  
                }  
            }else{  
                $module  =  A($group.MODULE_NAME);  
            }  
        }  
  
        if(!$module) {  
              
            if('4e5e5d7364f443e28fbf0d3ae744a59a' == MODULE_NAME) {  
                header("Content-type:image/png");  
                exit(base64_decode(App::logo()));  
            }  
            if(function_exists('__hack_module')) {  
                // hack 方式定义扩展模块 返回Action对象  
                $module = __hack_module();  
                if(!is_object($module)) {  
                    // 不再继续执行 直接返回  
                    return ;  
                }  
            }else{  
                // 是否定义Empty模块  
                $module = A($group.'Empty');  
                if(!$module){  
                    _404(L('_MODULE_NOT_EXIST_').':'.MODULE_NAME);  
                }  
            }  
        }  
        // 获取当前操作名 支持动态路由  
        $action = C('ACTION_NAME')?C('ACTION_NAME'):ACTION_NAME;  
        $action .=  C('ACTION_SUFFIX');  
        try{  
            if(!preg_match('/^[A-Za-z](\w)*$/',$action)){  
                // 非法操作  
                throw new ReflectionException();  
            }  
            //执行当前操作  
            $method =   new ReflectionMethod($module, $action);  
            if($method->isPublic()) {  
                $class  =   new ReflectionClass($module);  
                // 前置操作  
                if($class->hasMethod('_before_'.$action)) {  
                    $before =   $class->getMethod('_before_'.$action);  
                    if($before->isPublic()) {  
                        $before->invoke($module);  
                    }  
                }  
                // URL参数绑定检测  
                if(C('URL_PARAMS_BIND') && $method->getNumberOfParameters()>0){  
                    switch($_SERVER['REQUEST_METHOD']) {  
                        case 'POST':  
                            $vars    =  array_merge($_GET,$_POST);  
                            break;  
                        case 'PUT':  
                            parse_str(file_get_contents('php://input'), $vars);  
                            break;  
                        default:  
                            $vars  =  $_GET;  
                    }  
                    $params =  $method->getParameters();  
                    foreach ($params as $param){  
                        $name = $param->getName();  
                        if(isset($vars[$name])) {  
                            $args[] =  $vars[$name];  
                        }elseif($param->isDefaultValueAvailable()){  
                            $args[] = $param->getDefaultValue();  
                        }else{  
                            throw_exception(L('_PARAM_ERROR_').':'.$name);  
                        }  
                    }  
                    $method->invokeArgs($module,$args);  
                }else{  
                    $method->invoke($module);  
                }  
                // 后置操作  
                if($class->hasMethod('_after_'.$action)) {  
                    $after =   $class->getMethod('_after_'.$action);  
                    if($after->isPublic()) {  
                        $after->invoke($module);  
                    }  
                }  
            }else{  
                // 操作方法不是Public 抛出异常  
                throw new ReflectionException();  
            }  
        } catch (ReflectionException $e) {   
            // 方法调用发生异常后 引导到__call方法处理  
            $method = new ReflectionMethod($module,'__call');  
            $method->invokeArgs($module,array($action,''));  
        }  
        return ;  
    }



지원해야 하는 중국어 모듈 이름을 config.php CHINESE_MODULE_NAME 구성 배열에 추가하세요.

이렇게 하면 중국어 URL 구문 분석을 지원할 수 있습니다.


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP 세션에 어떤 데이터를 저장할 수 있습니까?PHP 세션에 어떤 데이터를 저장할 수 있습니까?May 02, 2025 am 12:17 AM

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

PHP 세션을 어떻게 시작합니까?PHP 세션을 어떻게 시작합니까?May 02, 2025 am 12:16 AM

tostartAphPessession, us

세션 재생이란 무엇이며 보안을 어떻게 개선합니까?세션 재생이란 무엇이며 보안을 어떻게 개선합니까?May 02, 2025 am 12:15 AM

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

PHP 세션을 사용할 때 몇 가지 성능 고려 사항은 무엇입니까?PHP 세션을 사용할 때 몇 가지 성능 고려 사항은 무엇입니까?May 02, 2025 am 12:11 AM

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

PHP 세션은 쿠키와 어떻게 다릅니 까?PHP 세션은 쿠키와 어떻게 다릅니 까?May 02, 2025 am 12:03 AM

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

PHP는 사용자 세션을 어떻게 식별합니까?PHP는 사용자 세션을 어떻게 식별합니까?May 01, 2025 am 12:23 AM

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

PHP 세션을 확보하기위한 모범 사례는 무엇입니까?PHP 세션을 확보하기위한 모범 사례는 무엇입니까?May 01, 2025 am 12:22 AM

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

PHP 세션 파일은 기본적으로 어디에 저장됩니까?PHP 세션 파일은 기본적으로 어디에 저장됩니까?May 01, 2025 am 12:15 AM

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

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

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

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경