我有一个表单,用户插入数据并将此数据放入数据库。插入的数据可以加载到网页或RTF文档中。
数据库(Postgresql)和网页设置为拉丁语2(ISO-8859-2),但PHP(5.3.3)以某种方式将所有特殊字符转换为HTML代码。
当用户将短划线(或其他特殊字符)放入表单并将其保存到数据库中时,会出现问题。在数据库中,短划线显示为 - 。我知道由于安全原因这是可以的,但我在将数据从数据库加载到网页时处理XSS。但是,当我想将这些数据放入RTF文件时,它显示为–
,这就是为什么我想在数据库中使用字符而不是 - 。
我在保存到数据库(iconv,html_entity_decode,htmlspecialchars_decode等)时尝试了各种转换,但它始终保存为–
。
$dbobj = DB::connect("pgsql://" . DBUSER . ":" . DBUSERPASS . "@" . DBSERVER . "/" . DBNAME, true);
$sql = "INSERT INTO table1 (event) VALUES (?)";
$params = array();
$params[] = $event;
$result = $dbobj->getAll($sql, $params);
check_for_db_error($result);
return $id;
我正在使用PearDB。
可能的解决方案是我可以创建包含各种字符的表并每次都替换它。 但我喜欢PHP为我处理它。有可能吗?
现在我在脚本的开头打印了整个$_POST
(所以在用它做任何事情之前)并用fiddler检查原始文本并且有–
而不是 - 但我不知道为什么