2011-07-27 34 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字段來解碼文本。 (但不會允許更新數據..)您也可以嘗試觸發記錄加載以解碼字段中的數據,以便您可以正確查看/編輯。

相關問題