2014-10-27 39 views
1

特殊字符我在Perl,Apache和MySQL開發的遺留應用程序。出現在HTML格式

一些在用於字符應用顯示HTML碼的部分。的問題是獨立於鍵盤上的以下特點:

  1. 分號
  2. 逗號
  3. 引號
  4. 比符號
  5. 比符號

Refer the screenshot.

更大少

這張桌子是s tores這個數據也存儲這樣的數據本身。該表是CHARSET = latin1。

Refer DB screenshot.

該應用程序是在HTML呈現使用

<meta charset="utf-8" /> 

我的問題是「如何解決這個問題?」

  • 我應該對數據庫字符集進行一些更改嗎? (我在應用程序中有多個 的地方,在多個部分使用多個表 )
  • 我應該在PERL數據庫連接中進行一些更改嗎? (這看起來像處理問題的最佳場所,因爲這對於任何使用數據庫交互的模塊來說都很常見),因此它將對特殊字符進行解碼/編碼。

任何其他建議?

+0

數據如何存儲在數據庫中?是否有一些代碼可以轉換實際的用戶輸入,例如Ascii撇號(')被轉換爲'&#39:'? (這樣做沒有真正的理由,但遺留代碼通常會做一些奇怪的事情。)數據庫中的數據如何插入到HTML文檔中?如果你只是插入'&#39:',它會顯示爲Ascii撇號,所以代碼必須做其他事情。 – 2014-10-27 07:27:17

+0

可能是代碼的HTML呈現部分不知道數據庫中的文本已經被特殊字符轉義;所以它在渲染html之前再次逃脫。 – kums 2014-10-27 10:16:31

+0

IMO這是一個數據庫的問題:Latin-1的字符集支持當前編碼的實體,所以應該不需要任何心理體操轉換''變回相應的字符,以便信息能夠直接在數據庫中查看'撇號等。如果db數據被輸出到某些媒體,某些媒體確實需要編碼 - 例如到需要編碼'<' and '>'的網頁,生成網頁輸出的代碼應該執行此轉換。來自OP的 – 2014-10-27 14:07:31

回答

1

看起來不像一個DB字符集的問題,它看起來像一個HTML逃避問題。看起來您已經在數據值中預先轉義了字符實體引用,這些引用通常會被HTML瀏覽器取消轉義,但它們位於文本框中並轉義。他們如何得到渲染?由一些AJAX代碼不正確渲染逃逸?

https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML

+0

:「我有一個用Perl開發的遺留應用程序」... – 2014-10-27 09:22:38

+0

@ialarmedalien - 不確定你指的是什麼。 Perl遺留應用程序也有AJAX。我只是假設如果該字段沒有被瀏覽器渲染,該字段可以被填充。 AJAX是最有可能的解釋。我的回答只是我最好的猜測。 – codenheim 2014-10-27 17:16:26