2011-07-27 31 views
1

我不确定这是一个php-,filemaker,mysql或odbc驱动程序问题。如何获得正确的字符编码mysql和filemaker之间

出于安全原因,我当前php webform的输入字段将特殊字符转换为十六进制代码(例如:#变为')。此十六进制代码保存在数据库中,并且也会以Filemaker11的十六进制代码形式显示。这不是我想要的。 我怎样才能确保特殊字符将显示为它应该是?

反过来(从filemaker到db),插入特殊字符时不会进行转换。

我怎样才能确保一切都会一致?

亲切的问候,吉荣

+0

你是什么意思“出于安全原因”?做这种转换不会有助于安全。无论如何,谁或是在做什么? – Ariel

+0

哦,你的意思是百分比编码?像空间变成%20? PHP自动解码它们,尽管你也可以手动完成。他们没有转换为安全性,他们被转换,因为他们不能被放在一个网址。我想你需要给我们更多的细节 - 例如输出结果如何,源代码,等等。 – Ariel

+0

字符如“,”#“被转换为十六进制。我认为这与安全有关。 插入到DP中的过滤变量是: $ insert_voornaam = filter_var($ _ POST ['voornaam'],FILTER_SANITIZE_STRING); 之后,将会准备插入: $ stmt-> bindParam(':voornaam',$ insert_voornaam,PDO :: PARAM_STR); 并执行: $ stmt-> execute(); – Jroen

回答

1

解决了!看来,我不得不在我的PHP脚本中添加一行。

建立连接后,php需要告诉mysql编码需要。这可以通过以下行来完成:

$dbh->query("SET NAMES 'utf8'"); 

感谢您的努力!

0

此:'类型的编码不被浏览器自动完成。有东西在做。通常你只在输出没有输入。

您可以使用html_entity_decode()来撤消它。但我强烈建议你先弄清楚它为什么发生。

+0

没错,编码发生在_output_上。 问题是Filemaker不会对它进行解码,所以它会显示为'''。 – Jroen

+0

我不明白 - filemaker在html中阅读?如何读取HTML和不支持实体? – Ariel

+0

Filemaker没有HTML阅读。它只是显示数据库的VARCHAR字段中的字符而不进行解码。 – Jroen

1

FileMaker只显示存储在MySQL中的数据。如果你用PhpMyAdmin这样的工具拉起数据库,你应该看到varchar也包含了编码。由于FMP只是将其视为文本字段,它显示了存储的编码。如果您想在FMP中解码,您可以显示具有自定义函数的varchar的calc字段来解码文本。 (但不会允许更新数据..)您也可以尝试触发记录加载以解码字段中的数据,以便您可以正确查看/编辑。