我遇到mdash字符问题( - 或Alt + 0151)。
我有一个像这样的dtd页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
我还有一个表格(缩短版):
<form name="dep_new" action="whatever.php" method="post">
<input class="mandatory" id="dname" type="text" name="dname" value="<?php echo $department->name; ?>"/>
</form>
它正在使用PHP 5.2和MySQL 5.1来存储该输入的值。
现在,当我使用任何其他浏览但IE并在此字段中输入一个mdash字符时(通过键入Alt + 0151)我得到一个适当的长划线。它可以毫无问题地从数据库中保存和检索。
然而,当我尝试使用IE9保存它时,我得到以下内容:
打字:测试 -
保存并刷新后:测试 - 测试
在其他浏览器中,我看到:Test Test
Becasue这是一个在其他页面上显示的离线名称,我得到的结果是: 在IE中:TestTest 其他浏览器:测试[我不能在这里发布的东西 - 其中包含00和97的正方形]测试
这个方块看起来像这样:
----
|00|
|97|
----
但是,如果我在FF或Chrome中做同样的事情,它在IE页面中显示也很好,而在IE输入中显示:
种皮€”测试
任何编码/解码尝试都会失败。 但是,如果我将dtd更改为:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN>
在所有浏览器中一切正常......
有什么想法吗?
答案 0 :(得分:1)
标准Ascii表或ISO 8859-1字符集中没有Em-dash,它在Windows-1252字符集中可用作0x97,但这是仅限Windows的标准。它也可以作为unicode字符U + 2014使用,因此如果您想安全地使用em-dash,最好使用UTF-8编码。将其添加到您的<head>
:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
答案 1 :(得分:0)
当您回显姓名时,您似乎需要拨打htmlentities:
<input class="mandatory" id="dname" type="text" name="dname"
value="<?php echo htmlentities($department->name) ?>"/>