我有一个问题,我可以在这个板上找到很多关于这个问题的问题。我想通过 POST 输入波兰语字符:
当我通过 POST 使用表单发送以下数据时:
Ciało wielbłądów osiąga długość do 3 m. Ich szyja jest długa, łukowato wygięta; głowa długa,
PHP 显示以下内容:
<p>Ciało wielbłąd&oacute;w osiąga długość do 3 m. Ich szyja jest długa, łukowato wygięta; głowa długa,
即使直接做:
exit(print_r($_POST));
在页面顶部。
到目前为止我做了什么?
我尝试使用 HTML 实体
exit(htmlentities($_POST['EditorField'], ENT_NOQUOTES, 'UTF-8'));
我尝试使用 utf8_decode
exit(utf8_decode($_POST['EditorField']));
我已将内部编码设置为 UTF-8 :
mb_internal_encoding('UTF-8');
这发生在框架初始化类的早期。我希望有一些我错过的东西,并且无论如何都可以工作。
编辑:
我添加了以下内容:
<form action="" method="post" accept-charset="utf-8">
接受字符集="utf-8"
我删除了 TinyMCE 编辑器
还是没有运气!
CiaÅ‚o wielbÅ‚Ä…dów osiÄ…ga dÅ‚ugość do 3 m. Ich szyja jest dÅ‚uga, Å‚ukowato wygiÄ™ta; gÅ‚owa dÅ‚uga
编辑: 与此同时,我确实发现了以下内容:
添加:
header('Content-Type: text/html; charset=utf-8');
这可以使 $_POST 正确发送。我认为这与以下内容相同:
mb_internal_encoding('UTF-8');
但是我错了。
但是仍然存在一个小问题。使用 PDO 保存数据时,它仍然会截断数据。
我认为我仍然使用正确的设置来初始化连接
///########==================================================
///######## SET OPTIONS FOR PDO IN ARRRAY FORMAT
///########==================================================
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
///########==================================================
///########==================================================
///######## TRY CONNECTING WITH THE PDO DATABASE
///########==================================================
try {
///######## MAKE THE CONNECTION AND ASSIGN IT TO : DBH
self::$DbConnection[$ConnectionName] = new PDO(
$dsn,
self::$DbCredentials[$ConnectionName]['username'],
self::$DbCredentials[$ConnectionName]['password'],
$options
);
///######## SET UTF 8
self::$DbConnection[$ConnectionName]->exec('SET CHARACTER SET utf8');
}
///######## CATCH ANY ERRORS
catch (PDOException $e) {
///######## IF ANY ERRORS JUST SHOW THEM
///self::$error = $e->getMessage();
exit(self::errorField('<strong>PDO database connection error</strong><br />'.$e->getMessage()));
}
///########==================================================
(*我当然还是在某个地方犯了错误。但现在我必须找到它...... *)
解决了!!我希望有人仍然可以发帖给我,因为我找到了解决方案。它的方向与该板上所有其他注意到的问题完全不同:
必需的 :
header('Content-Type: text/html; charset=utf-8'); mb_internal_encoding('UTF-8');
但是被删除了!!:
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
我也删除了:
self::$DbConnection[$ConnectionName]->exec('SET CHARACTER SET utf8');
分别尝试了上述两种方法。但现在它起作用了。