我在CakePHP的“Sanitize”课上遇到了一个奇怪的问题。使问题变得奇怪的是问题仅存在于控制器中,而不存在于视图中。
以下是网址:
http://example.com/testing/index?test=r%E9sum%E9
以下是代码:
echo '<p>Test: -' . 'résumé' . '-</p>';
echo '<p>Test: -' . $_GET['test'] . '-</p>';
echo '<p>Test: -' . Sanitize::html($_GET['test']) . '-</p>';
无论代码是从控制器还是视图执行,上述代码都会输出:
Test: -résumé-
Test: -r�sum�-
Test: --
当我从视图中执行代码时,一切都很好,但是当我从控制器执行代码时,会生成此警告:
Warning: Warning (2): htmlentities() [<a href='function.htmlentities'>function.htmlentities</a>]: Invalid multibyte sequence in argument in [/Applications/MAMP/htdocs/dev/cake/libs/sanitize.php, line 120]
为什么仅从控制器而不是视图生成警告?我该怎么做才能解决它?
我使用PHP 5.2.17和5.3.3尝试过这个。我也尝试过多个版本的CakePHP,包括1.3.13。
答案 0 :(得分:0)
我正在写答案,因为对于那些不读评论的人来说更清楚:P
尝试
echo '<p>Test: -' . utf8_encode($_GET['test']) . '-</p>';
如果没有尝试
echo '<p>Test: -' . utf8_decode($_GET['test']) . '-</p>';
你在单词,文件编码本身或者蛋糕的编码或php的编码之间存在冲突的冲突
sanitize使用php函数htmlentities,如果它有错误的编码,它可能会给你特殊字符的错误(sanitize使用utf8,如果没有告诉其他:S)你可以使用utf8_encode来看它也有效;)
确保您的控制器和视图文件也是您的数据库和您的蛋糕配置以及您的php服务器配置,这样您就不需要该功能:S希望它可以帮助您(必要时重启服务器)
$ _ GET总是得到urldecoded(另一个php函数),我认为它被解码为你的php文件编码或php.ini编码配置,现在还不确定......
但无论如何,如果你保持你的编码设置相同你就不会有问题,并记住php文件的编码本身就是文件而不是描述字符集的元标记...
希望这有助于你将来:)