2012-01-01 4 views
0

Я использую CakePHP 2.0.4, PHP 5.3.1, Apache 2.2.14.CakePHP Изображения со специальными символами в имени не отображаются

Например: имя файла F # 7m7 ~ 1.gif. Он действительно существует, путь и имя файла верны.

перед печатью HTML-тег, закодировать его с помощью UrlEncode() и тег выглядит:

<img src="/chord/img/chords/F%2523m7~1.gif" alt="F#m7"> 

Но изображение не загружается. ('Chord' является плагином CakePHP)

Я также попытался загрузить его непосредственно в браузере, http://myapp.localhost/chord/img/chords/F%2523m7~1.gif, но я получаю это: «Отсутствует ошибка контроллера: Chord.ImgController не найден».

Все отлично работает с файлом в качестве ~ 1.gif, но с именами файлов из файлов нарушает такие как F # м ~ 1.gif, B (7) ~ 1.gif т.д.

Everthing работает нормально в чистой PHP-кодированной версии. Теперь он не работает на CakePHP.

Есть ли у кого-нибудь ключи?

+0

Простейшим решением является просто запретить имена файлов с необычными символами. Лучше всего придерживаться [a-zA-Z0-9 \ ._-] – GordonM

+0

GordonM, я считаю, что вы правы. Но так как это работало в чистой версии php, я понял, что можно работать и в CakePHP. Кстати, имя файла изображений автоматически генерируется, тогда я могу реорганизовать движок для генерации этого способа. Но я действительно хочу знать, почему просто не работает. Если я откажусь от пути, я дам вам знать! hehe – colares

+0

Ну, спасибо за ответ, ребята. Я решил повторить название изображений (его сценарий), дружелюбный на этот раз. Для записи я нашел эту приятную ссылку по этой проблеме: http://playground.zaplabs.com/sandbox/qa/stackexchange/serverfault/295664/. Но я считаю, что это лишние накладные расходы для моей ситуации. – colares

ответ

0

Вы, кажется, двойное кодирование, правый urlencode для F#7m7~1.gif is F%237m7~1.gif, а не F%2523m7~1.gif. Просто удалите один из них.

Ошибка пропущенного контроллера только потому, что на вашем сервере нет такого файла, поэтому Cake думает, что вы пытаетесь вызвать ImgController в плагине Chord. Попробуйте http://myapp.localhost/chord/img/chords/F%237m7~1.gif, он должен работать.

В любом случае, как отметил @GordonM, лучше всего использовать обычные символы для имен файлов.

+0

Привет! Спасибо за ответ! Хорошая точка зрения! Но я пробовал также с одним кодированием, событием без кодирования, и все же это не сработало. – colares

+0

Значит, вы говорите, что когда вы загружаете этот http: //myapp.localhost/chord/img/chords/F%237m7~1.gif в свой браузер, он не работает? – luchomolina

+0

Да, это не работает. О, и пример F # m7 ~ 1.gif Я пробовал http: //myapp.localhost/chord/img/chords/F%23m7~1.gif – colares