首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定的kanji在http获取请求期间被错误编码。

特定的kanji在http获取请求期间被错误编码。
EN

Stack Overflow用户
提问于 2015-07-03 13:26:13
回答 1查看 219关注 0票数 3

在我正在开发的应用程序中使用kanji时,我遇到了一个非常奇怪的编码问题;除了字符"免“之外,所有kanji字符都能正常工作。当我尝试使用这个字符时,mongodb会抛出以下异常:

代码语言:javascript
复制
Exception: non-utf8 string: � 

任何其他汉字都能正常工作。

我尝试删除处理字符串的函数,并将其直接输入到处理mongodb的函数中,但没有成功。我也试图从不同的编码转换字符,但没有任何效果。

这就是我所用的:

谢谢!

控制器函数处理请求

代码语言:javascript
复制
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;
    }
}

非工作的kanji:请求头:

代码语言:javascript
复制
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

不工作的kanji:响应头:

代码语言:javascript
复制
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

用于工作kanji的请求头:

代码语言:javascript
复制
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

用于工作kanji的响应头:

代码语言:javascript
复制
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

编辑:

用于免的堆栈跟踪:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
[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:

代码语言:javascript
复制
[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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-04 04:21:13

从堆栈跟踪来看,在到达控制器之前,似乎有东西正在剥离部分$findKanji。与表示kanjiAction的三个字节不同,对免的调用中只有第一个字节。

另一个失败的kanji也包含一个0x85字节,所以我想知道,在您访问控制器之前,是否有什么东西在到达0x85字节时正在剥离所有字节。

因此,现在您需要在参数到达控制器之前查看参数可能受到的干扰。是否有任何事件侦听器附加到dispatch:beforeDispatchLoop或任何dispatch事件?(如果是,什么?)

我将注意到,我刚刚从零开始制作了一个phalcon应用程序(遵循本教程),以查看我将得到的堆栈跟踪,并得到堆栈跟踪:

代码语言:javascript
复制
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的三个字符:如果我点击url /view/kanji/%E5,我只得到一个字符。

这是与一个简化的控制器一起使用的,该控制器的存在仅仅是为了提供堆栈跟踪:

代码语言:javascript
复制
<?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');
    }
}

这是使用Phalcon 2.0.1。因此,我们知道普通的phalcon应用程序将所有三个字节传递给处理程序,至少在我设置的ubuntu和Apache2.2中是这样的。

看看我的设置(显然有效)和您的设置之间的区别,我想知道这种区别是否与Windows上的Apache重写规则有关。因此,让我们将重写进程上的调试打开。由于您有Apache 2.4,所以通过放置以下指令来完成:

代码语言:javascript
复制
LogLevel alert rewrite:trace3

进入服务器配置文件中的<VirtualHost>部分。

完成此操作后,使用apache日志中包含[rewrite:的行更新答案,这些行是在尝试访问这些错误的kanji时生成的。

编辑:既然你已经包含了这些信息,我想我有了一个解决办法。

我不知道你为什么要看到你自己的问题。我将分别尝试复制它,这样我就可以向apache提交一个bug (虽然在得到一个窗口框之前我可能无法),但同时我认为我有了一个修复程序。

首先,在服务器配置文件中的<VirtualHost>部分中添加以下指令:

代码语言:javascript
复制
AllowEncodedSlashes On

然后,假设您按照Phalcon教程设置了.htaccess文件,将B选项添加到顶层目录的.htaccess文件中的第二个RewriteRule中,这样行如下所示:

代码语言:javascript
复制
RewriteRule  (.*) public/$1 [B,L]

然后,还将B标志添加到public/目录中的.htaccess文件中的.htaccess行中,使该行成为:

代码语言:javascript
复制
RewriteRule ^(.*)$ index.php?_url=/$1 [B,QSA,L]

第二个更改可能没有必要;因为我没有一个系统与您的确切问题,我不能检查。

仍然没有结果,但让我们再尝试一件事:将(.*)转换为((?s).*),以便修改之前修改的行:

代码语言:javascript
复制
RewriteRule  ((?s).*) public/$1 [B,L]

代码语言:javascript
复制
RewriteRule ^((?s).*)$ index.php?_url=/$1 [B,QSA,L]

假设这是可行的,其背后的理由是奇怪的。

显然,字符0x85是Unicode中的“下一行”字符,PCRE (作为Apache重写功能的基础的regex引擎)可以将其视为换行符如这里所详述。编译PCRE的通常方法是只将字符10看作换行符,但可以编译PCRE以将更多的字符视为换行符。

当一个字符是“换行符”时,regex元字符.将不匹配它,除非s regex选项是活动的。(?s)位使该选项处于活动状态。

如果这样做有效,您可以消除B选项在RewriteRules上,并从您的<VirtualHost>中删除AllowEncodedSlashes指令。

您是在使用本地编译的apache二进制文件,还是从官方位置获得的?因为如果你从一个正式的地方得到一个,你应该抱怨他们用这个奇怪的选项编译PCRE浪费了你的周末。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31207949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档