2010-09-22 99 views
1

我们正在做一个AJAX调用来从数据库中检索。由于我们的客户可能使用不同的语言,因此我们将所有内容编码为Unicode以存储在数据库中(不必担心排序问题等)。现在,当我们获取要显示在输入文本字段中的内容时,它将显示Unicode代码。检查HTML 4 documentation for input和值是一个CDATA它告诉我这些unicode应显示为他们的字符。
从附加的屏幕截图可以看出情况并非如此,我想知道是否有办法“强制”这种行为。在输入字段强制显示来自Unicode的文本

alt text

+0

强制使用有效字符的最佳方式是使用适当的编码 - UTF8。这是2010年,你知道的。 – naivists 2010-09-22 16:48:43

+0

我的歉意,那不是ASCII码,这是unicode。是的,我知道这是2010年,我们生活在地球,谢谢。 – Purefan 2010-09-22 19:50:31

+1

你把“Unicode”和“HTML实体”搞混了。 – BalusC 2010-09-24 00:31:21

回答

1

由于我们的客户端可以使用不同的语言,我们都编码成ASCII到数据库存储(保存担心排序规则和这样)。

恕我直言,将html实体存储到数据库中是一种非常糟糕的做法。我强烈建议你在任何地方都使用UTF-8编码。这可以让你免于担心排序等问题。

+0

我的歉意,那不是ASCII码,这是unicode。 – Purefan 2010-09-22 19:50:03

1

您正在传递一个完整的&#...;数字字符引用的JavaScript字符串。 JavaScript字符串不是HTML编码的,因此您的代码确实会生成包含&符号,哈希等的JS字符串。

当您将其设置为输入的DOM值(val())时,自然那些&号将仍然存在。 DOM属性是纯字符串,而不是标记。如果您打算将其标记用于与innerHTML/html()一起使用,则只需在JavaScript中对HTML进行编码。

因此,PHP不应该HTML编码不会插入到HTML中的内容。使用json_encode()创建JavaScript字符串文字:

$('#js_global_status_input').val(<?php echo json_encode($status_value); ?>); 
+0

非常感谢您的时间和建议,但是,由于它没有对我的工作进行到底,这里是Ajax响应:$( “#js_status_input”)VAL( “מ ה ב ר א ש ש ל ך?”)。那是使用json_encode – Purefan 2010-09-28 11:47:02

+0

你还在传递&符号和哈希值。不要那样做,除了标记之外,它们没有任何意义。 'val()'不是标记,你需要传递一个正常的,未编码的字符串:'val('מהבראששלך')',或者,如果在JSON字符串中转义为ASCII码安全('json_encode'将会执行默认),'val(“\ u05de \ u05d4 \ u05d1 \ u05e8 \ u05d0 \ u05e9 \ u05e9 \ u05dc \ u05da”)'。您需要让您的服务器端脚本停止对正在分发的值进行HTML编码。 – bobince 2010-09-28 12:29:11

+0

如果你实际上在你的数据库内容中有'מ ה ...',那么你遇到了很大的问题。虽然你可以通过在PHP中调用'html_entity_decode($ s,ENT_QUOTES,'utf8')'来解决这个问题,但是在你的数据库中使用HTML编码的文本肯定表明你的应用程序正在做一些非常错误的事情,编码所有输入,而不是在输出阶段进行编码。数据库内容应始终以原始文本形式保存。 – bobince 2010-09-28 12:32:13