2015-07-03 26 views
2

當我正在開發的應用程序中使用漢字時,我遇到了一個非常奇怪的編碼問題;除了「免」字以外的所有漢字字符都可以正常工作。 當我嘗試使用該字符,MongoDB中拋出以下異常:在http獲取請求期間,特定的漢字得到錯誤編碼

Exception: non-utf8 string: � 

任何其他漢字正常工作。

我試圖刪除函數處理字符串,並直接輸入到函數處理mongodb,但沒有成功。 我也嘗試從各種編碼轉換字符,但無濟於事。

這是我在用的:

謝謝!

控制器功能處理請求

public function kanjiAction($findKanji = "") 
{ 
    // Really weird issue with the kanji 免 not working 

    $findKanji = $this->filter->sanitize($findKanji, 'string'); 
    $findKanji = mb_substr($findKanji, 0, 1, 'UTF-8'); 

    $kanjiHash = md5($findKanji); 

    // If entry does not exist in cache, create it 
    if(!$this->viewCache->exists($kanjiHash)) { 

     // Get data from DB 
     $kanji = Kanji::findById($findKanji); 

     $words = Words::containingKanji($findKanji); 

     $showWords = array(); 

     foreach ($words as $word) { 
      foreach ($word->k_ele["keb"] as $key => $value) { 
       if(strpos($value, $findKanji) != false) { 
        $showWords[] = (object) array(
         "word" => $value, 
         "readings" => $word->r_ele["reb"], 
         "meanings" => $word->sense["gloss"] 
        ); 
        break; 
       } 
      } 
     } 

     // Fetch translations 
     $this->view->onTitle = $this->translation->query('onTitle'); 
     $this->view->kunTitle = $this->translation->query('kunTitle'); 
     $this->view->radicalTitle = $this->translation->query('radicalTitle'); 
     $this->view->meaningsTitle = $this->translation->query('meaningsTitle'); 
     $this->view->strokeCountTitle = $this->translation->query('strokeCountTitle'); 
     $this->view->jlptTitle = $this->translation->query('jlptTitle'); 
     $this->view->containsWordsTitle = $this->translation->query('containsWordsTitle'); 
     $this->view->readingsTitle = $this->translation->query('readingsTitle'); 
     $this->view->wordsTitle = $this->translation->query('wordsTitle'); 
     $this->view->notFound = $this->translation->query('notFound'); 

     // Pass data to view 
     $this->view->kanji = $kanji->_id; 
     if(isset($kanji->reading["on"]) && count($kanji->reading["on"]) > 0) 
      $this->view->onReadings = $kanji->reading["on"]; 
     if(isset($kanji->reading["kun"]) && count($kanji->reading["kun"]) > 0) 
      $this->view->kunReadings = $kanji->reading["kun"]; 
     if(isset($kanji->radicals)) 
      $this->view->radicals = $kanji->radicals; 
     if(isset($kanji->attributes['jlpt'])) 
      $this->view->jlpt = $kanji->attributes['jlpt']; 
     if(isset($kanji->attributes['stroke_count'])) 
      $this->view->strokeCount = $kanji->attributes['stroke_count']; 
     if(isset($kanji->meaning)) 
      $this->view->meanings = $kanji->meaning; 
     if(count($showWords) > 0) 
      $this->view->words = $showWords; 

     $this->view->kanjiHash = $kanjiHash; 
    } else { 
     $this->view->kanjiHash = $kanjiHash; 
    } 
} 

用於非工作漢字請求報頭:

HTTP/1.1 200 OK 
Date: Fri, 03 Jul 2015 13:04:05 GMT 
Server: Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8 
X-Powered-By: PHP/5.6.8 
Content-Length: 29 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=utf-8 
:對非工作漢字

GET /view/kanji/%E5%85%8D HTTP/1.1 
Host: localhost 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4 

響應標頭

的工作漢字請求標題:爲工作漢字

GET /view/kanji/%E5%A8%A9 HTTP/1.1 
Host: localhost 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4 

響應頭:

HTTP/1.1 200 OK 
Date: Fri, 03 Jul 2015 13:16:20 GMT 
Server: Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8 
X-Powered-By: PHP/5.6.8 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Transfer-Encoding: chunked 
Content-Type: text/html; charset=utf-8 

編輯:

堆棧跟蹤免:

#0 [internal function]: MongoCursor->rewind() 
#1 [internal function]: Phalcon\Mvc\Collection::_getResultset(Array, Object(Purple\Model\Kanji), Object(MongoDB), true) 
#2 [internal function]: Phalcon\Mvc\Collection::findFirst(Array) 
#3 E:\xampp\htdocs\app\Purple\Controller\ViewController.php(33): Phalcon\Mvc\Collection::findById('\xE5') 
#4 [internal function]: Purple\Controller\ViewController->kanjiAction('\xE5') 
#5 [internal function]: Phalcon\Dispatcher->dispatch() 
#6 E:\xampp\htdocs\public\index.php(98): Phalcon\Mvc\Application->handle() 
#7 {main} 

編輯2:

[Mon Jul 06 18:05:59.294298 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] add path info postfix: E:/xampp/htdocs/view -> E:/xampp/htdocs/view/kanji/\xe5\x85\x8d 
[Mon Jul 06 18:05:59.294798 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] strip per-dir prefix: E:/xampp/htdocs/view/kanji/\xe5\x85\x8d -> view/kanji/\xe5\x85\x8d 
[Mon Jul 06 18:05:59.294798 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] applying pattern '^$' to uri 'view/kanji/\xe5\x85\x8d' 
[Mon Jul 06 18:05:59.294798 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] add path info postfix: E:/xampp/htdocs/view -> E:/xampp/htdocs/view/kanji/\xe5\x85\x8d 
[Mon Jul 06 18:05:59.294798 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] strip per-dir prefix: E:/xampp/htdocs/view/kanji/\xe5\x85\x8d -> view/kanji/\xe5\x85\x8d 
[Mon Jul 06 18:05:59.294798 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] applying pattern '(.*)' to uri 'view/kanji/\xe5\x85\x8d' 
[Mon Jul 06 18:05:59.294798 2015] [rewrite:trace2] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] rewrite 'view/kanji/\xe5\x85\x8d' -> 'public/view/kanji/\xe5' 
[Mon Jul 06 18:05:59.294798 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] add per-dir prefix: public/view/kanji/\xe5 -> E:/xampp/htdocs/public/view/kanji/\xe5 
[Mon Jul 06 18:05:59.294798 2015] [rewrite:trace2] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] strip document_root prefix: E:/xampp/htdocs/public/view/kanji/\xe5 -> /public/view/kanji/\xe5 
[Mon Jul 06 18:05:59.294798 2015] [rewrite:trace1] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f045c0/initial] [perdir E:/xampp/htdocs/] internal redirect with /public/view/kanji/\xe5 [INTERNAL REDIRECT] 
[Mon Jul 06 18:05:59.296799 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f06278/initial/redir#1] [perdir E:/xampp/htdocs/public/] add path info postfix: E:/xampp/htdocs/public/view -> E:/xampp/htdocs/public/view/kanji/\xe5 
[Mon Jul 06 18:05:59.296799 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f06278/initial/redir#1] [perdir E:/xampp/htdocs/public/] strip per-dir prefix: E:/xampp/htdocs/public/view/kanji/\xe5 -> view/kanji/\xe5 
[Mon Jul 06 18:05:59.317801 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f06278/initial/redir#1] [perdir E:/xampp/htdocs/public/] applying pattern '^(.*)$' to uri 'view/kanji/\xe5' 
[Mon Jul 06 18:05:59.318301 2015] [rewrite:trace2] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f06278/initial/redir#1] [perdir E:/xampp/htdocs/public/] rewrite 'view/kanji/\xe5' -> 'index.php?_url=/view/kanji/\xe5' 
[Mon Jul 06 18:05:59.318301 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f06278/initial/redir#1] split uri=index.php?_url=/view/kanji/\xe5 -> uri=index.php, args=_url=/view/kanji/\xe5 
[Mon Jul 06 18:05:59.318301 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f06278/initial/redir#1] [perdir E:/xampp/htdocs/public/] add per-dir prefix: index.php -> E:/xampp/htdocs/public/index.php 
[Mon Jul 06 18:05:59.318301 2015] [rewrite:trace2] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f06278/initial/redir#1] [perdir E:/xampp/htdocs/public/] strip document_root prefix: E:/xampp/htdocs/public/index.php -> /public/index.php 
[Mon Jul 06 18:05:59.318301 2015] [rewrite:trace1] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f06278/initial/redir#1] [perdir E:/xampp/htdocs/public/] internal redirect with /public/index.php [INTERNAL REDIRECT] 
[Mon Jul 06 18:05:59.318301 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f0d7d8/initial/redir#2] [perdir E:/xampp/htdocs/public/] strip per-dir prefix: E:/xampp/htdocs/public/index.php -> index.php 
[Mon Jul 06 18:05:59.318301 2015] [rewrite:trace3] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f0d7d8/initial/redir#2] [perdir E:/xampp/htdocs/public/] applying pattern '^(.*)$' to uri 'index.php' 
[Mon Jul 06 18:05:59.318801 2015] [rewrite:trace1] [pid 5728:tid 2180] mod_rewrite.c(475): [client 127.0.0.1:52741] 127.0.0.1 - - [localhost/sid#3dac08][rid#3f0d7d8/initial/redir#2] [perdir E:/xampp/htdocs/public/] pass through E:/xampp/htdocs/public/index.php 

編輯3:

[Tue Jul 07 01:25:18.844429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] add path info postfix: E:/xampp/htdocs/view -> E:/xampp/htdocs/view/kanji/\xe5\x85\x8d 
[Tue Jul 07 01:25:18.844429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] strip per-dir prefix: E:/xampp/htdocs/view/kanji/\xe5\x85\x8d -> view/kanji/\xe5\x85\x8d 
[Tue Jul 07 01:25:18.844429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] applying pattern '^$' to uri 'view/kanji/\xe5\x85\x8d' 
[Tue Jul 07 01:25:18.844429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] add path info postfix: E:/xampp/htdocs/view -> E:/xampp/htdocs/view/kanji/\xe5\x85\x8d 
[Tue Jul 07 01:25:18.844429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] strip per-dir prefix: E:/xampp/htdocs/view/kanji/\xe5\x85\x8d -> view/kanji/\xe5\x85\x8d 
[Tue Jul 07 01:25:18.844929 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] applying pattern '(.*)' to uri 'view/kanji/\xe5\x85\x8d' 
[Tue Jul 07 01:25:18.844929 2015] [rewrite:trace2] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] rewrite 'view/kanji/\xe5\x85\x8d' -> 'public/view%2fkanji%2f%e5' 
[Tue Jul 07 01:25:18.844929 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] add per-dir prefix: public/view%2fkanji%2f%e5 -> E:/xampp/htdocs/public/view%2fkanji%2f%e5 
[Tue Jul 07 01:25:18.844929 2015] [rewrite:trace2] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] strip document_root prefix: E:/xampp/htdocs/public/view%2fkanji%2f%e5 -> /public/view%2fkanji%2f%e5 
[Tue Jul 07 01:25:18.844929 2015] [rewrite:trace1] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f240c8/initial] [perdir E:/xampp/htdocs/] internal redirect with /public/view%2fkanji%2f%e5 [INTERNAL REDIRECT] 
[Tue Jul 07 01:25:18.849429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f25e28/initial/redir#1] [perdir E:/xampp/htdocs/public/] add path info postfix: E:/xampp/htdocs/public/view -> E:/xampp/htdocs/public/view/kanji/\xe5 
[Tue Jul 07 01:25:18.849429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f25e28/initial/redir#1] [perdir E:/xampp/htdocs/public/] strip per-dir prefix: E:/xampp/htdocs/public/view/kanji/\xe5 -> view/kanji/\xe5 
[Tue Jul 07 01:25:18.849429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f25e28/initial/redir#1] [perdir E:/xampp/htdocs/public/] applying pattern '^(.*)$' to uri 'view/kanji/\xe5' 
[Tue Jul 07 01:25:18.849429 2015] [rewrite:trace2] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f25e28/initial/redir#1] [perdir E:/xampp/htdocs/public/] rewrite 'view/kanji/\xe5' -> 'index.php?_url=/view%2fkanji%2f%e5' 
[Tue Jul 07 01:25:18.849429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f25e28/initial/redir#1] split uri=index.php?_url=/view%2fkanji%2f%e5 -> uri=index.php, args=_url=/view%2fkanji%2f%e5 
[Tue Jul 07 01:25:18.849429 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f25e28/initial/redir#1] [perdir E:/xampp/htdocs/public/] add per-dir prefix: index.php -> E:/xampp/htdocs/public/index.php 
[Tue Jul 07 01:25:18.849429 2015] [rewrite:trace2] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f25e28/initial/redir#1] [perdir E:/xampp/htdocs/public/] strip document_root prefix: E:/xampp/htdocs/public/index.php -> /public/index.php 
[Tue Jul 07 01:25:18.849429 2015] [rewrite:trace1] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f25e28/initial/redir#1] [perdir E:/xampp/htdocs/public/] internal redirect with /public/index.php [INTERNAL REDIRECT] 
[Tue Jul 07 01:25:18.849930 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f2d448/initial/redir#2] [perdir E:/xampp/htdocs/public/] strip per-dir prefix: E:/xampp/htdocs/public/index.php -> index.php 
[Tue Jul 07 01:25:18.849930 2015] [rewrite:trace3] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f2d448/initial/redir#2] [perdir E:/xampp/htdocs/public/] applying pattern '^(.*)$' to uri 'index.php' 
[Tue Jul 07 01:25:18.850430 2015] [rewrite:trace1] [pid 7480:tid 2176] mod_rewrite.c(475): [client 127.0.0.1:63967] 127.0.0.1 - - [localhost/sid#5fac08][rid#3f2d448/initial/redir#2] [perdir E:/xampp/htdocs/public/] pass through E:/xampp/htdocs/public/index.php 
+0

兌兌工作? What或傻怎麼樣? (我問,因爲那些漢字的UTF8代碼不同於僅在一個字節中破壞的代碼) –

+0

另外,它在哪裏拋出異常?你有某種跟蹤異常的堆棧跟蹤嗎? –

+0

@DanielMartin漢字䅍拋出相同的錯誤,傻瓜正常工作。查看堆棧跟蹤的編輯! 異常來自$ kanji = Kanji :: findById($ findKanji); –

回答

3

從您的堆棧跟蹤,似乎到達控制器之前東西剝去$findKanji的一部分。代替免費的三個字節,只有第一個在撥打kanjiAction

失敗的另一個漢字也包含一個0x85字節,所以我不知道是否有什麼之前你擊中你的控制器是剝離所有字節一旦它擊中字節0x85

所以現在你需要看看什麼可能會干擾你的參數,然後才能到達你的控制器。你有沒有附加到dispatch:beforeDispatchLoopdispatch事件的任何事件監聽器? (?如果是這樣,什麼)

我會注意到,我只是做了一個從無到有的爾康應用程序(跟着教程)看堆棧跟蹤我會得到,我得到堆棧跟蹤:

Exception: Because I can 
File=/var/www/tutorial/app/controllers/ViewController.php 
Line=15 
#0 [internal function]: ViewController->kanjiAction('???') 
#1 [internal function]: Phalcon\Dispatcher->dispatch() 
#2 /var/www/tutorial/public/index.php(39): Phalcon\Mvc\Application->handle() 
#3 {main} 

請注意三個字符被傳遞到kanjiAction:如果我打的網址/view/kanji/%E5我只得到一個字符。

這是與存在只是爲了給堆棧跟蹤簡化控制器:

<?php 

use Phalcon\Mvc\Controller; 

class ViewController extends Controller 
{ 

    public function indexAction() 
    { 
    } 

    public function kanjiAction($findKanji = "") 
    { 
     var_dump($findKanji); 
     throw new Exception('Because I can'); 
    } 
} 

這是使用爾康2.0.1。所以我們知道一個vanilla phalcon應用程序將所有三個字節傳遞給處理程序,至少在我的ubuntu和Apache 2.2的設置上。

看看我的設置(顯然工作)和你的設置之間的區別,我想知道這種差異是否與Windows上的Apache重寫規則有關。所以讓我們把重寫過程的調試變成現實。既然你的Apache 2.4,這是通過把該指令完成:

LogLevel alert rewrite:trace3 

進入你的<VirtualHost>部分服務器的配置文件。

一旦你這樣做了,用你試圖訪問這些錯誤漢字之一時生成的包含[rewrite:的apache日誌中的行更新答案。


編輯:現在你已經包含了這些信息,我想我有一個修復。

我不知道你爲什麼看到自己的問題。我將單獨嘗試重現它,以便我可以用apache提交一個錯誤(雖然我可能無法獲得一個windows包裝箱),但同時我認爲我有一個修復程序。

首先,在您的服務器配置文件中<VirtualHost>中添加該指令:

AllowEncodedSlashes On 

然後,假設你有你的.htaccess文件設置爲在爾康教程中,B選項添加到第二RewriteRule在頂級目錄的.htaccess文件,使該行的樣子:

RewriteRule (.*) public/$1 [B,L] 

然後也B標誌添加到RewriteRule線在.htaccess文件中public/目錄,使該行變爲:

RewriteRule ^(.*)$ index.php?_url=/$1 [B,QSA,L] 

這第二個變化可能沒有必要;因爲我沒有一個確切的問題系統,我無法檢查。


仍然沒有運氣,但是我們可以嘗試一件事:把(.*)((?s).*)使之前現在修改行閱讀:

RewriteRule ((?s).*) public/$1 [B,L] 

RewriteRule ^((?s).*)$ index.php?_url=/$1 [B,QSA,L] 

假設這個作品,其背後的推理是奇怪的。

顯然,字符0x85是Unicode中的「下一行」字符,可以作爲換行符由PCRE(基於Apache的重寫功能的正則表達式引擎)處理。 PCRE編譯的正常方式是僅將字符10視爲換行符(\ n),但可以編譯PCRE以將更多字符視爲換行符。

當一個字符是「換行」字符時,除非s正則表達式選項處於活動狀態,否則正則表達式元字符.將不匹配它。 (?s)位使該選項處於活動狀態。

如果此方法有效,您可以刪除RewriteRules上的B選項,並從<VirtualHost>中刪除AllowEncodedSlashes指令。

您是使用本地編譯的apache二進制文件,還是從官方位置獲得一個?因爲如果你從一個官方的地方得到一個,你應該抱怨他們用這個奇怪的選項編譯PCRE浪費了你的週末。

+0

最後編輯作品! 認爲這是類似的東西搞砸了。 無論是官方,我都無法回答。我使用XAMPP作爲開發環境,所以我不得不問他們是自己編譯還是使用官方編譯器。我會研究它,並在必要時編寫錯誤報告。謝謝您的幫助! –

+0

很高興這是一個解決方案。對不起,花了這麼長時間 - 我本應該讓我的記憶乍看起來像字符0x85是一個換行符字符,這是我提醒它時隱約知道的東西,但顯然與我的頭部距離不夠近,無法將其拉出。 –

+0

我現在已經向XAMPP報告了這個;我們會看看是否有任何內容:https://community.apachefriends.org/f/viewtopic.php?f = 16&t = 71201 –