XHTML,PHP,MySQL,IE和mdash字符

时间:2011-07-29 10:11:32

标签: php mysql html internet-explorer character-encoding

我遇到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>

在所有浏览器中一切正常......

有什么想法吗?

2 个答案:

答案 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) ?>"/>