2012-04-09 109 views
1

我正在处理一个MySQL数据库中的replacement character ......如果它停留在那里,它很好,但我试图编辑它。我的表单将字符显示为菱形,并带有问号(�)。所以我提交表单,比较表单上的数据和数据表单之间的数据,看它是否发生了变化。这里的问题是,当我提交表格时,它将替换字符变成�这是相当的html实体,所以当发生这种情况时,比较失败,代码认为字符串已经改变 - 它有,但不是真的。我试图使用不同的方法,将替换字符转换为与数据库相当的html实体,当它被比较时 - 它开始将另一个看似正常的字符转换为另一个替换字符html实体等价物 - 并将html实体进入替代角色 - 这根本不适用于此 - 但他们都失败了。是的,我已经尝试过html_entity_decode()和htmlspecialchars_decode()如何让替换字符变成PHP中的html实体?

我的问题是:如何让替换字符变成一个html实体?

+0

当它在PHP中,或者当它被插入到数据库中时,它会变成HTML实体吗? – 2012-04-09 05:23:27

+0

当它在PHP中。 – Err 2012-04-09 05:29:26

+0

因此,我将网页编码更改为UTF-8,以使其与数据库编码相匹配。我仍然无法解码html实体。我已经尝试过'mb_decode_numericentity($ str,array(0xEF,0xBF,0xBD),'UTF-8');' – Err 2012-04-09 21:30:17

回答

1

出于某种原因,网页浏览器正在提交 替换字符(U + FFFD),因为它是十进制数字HTML Entitiy:�。可能你已经把它输出到浏览器了?

但是,如果您希望输入包含HTML实体,则需要对其进行解码,如果您不想将它们作为HTML存储到数据库中。一个进来的UTF-8编码的字符串$str内解码数字实体:

$convmap = array (0, 0x10FFFF, 0, 0xFFFFFF); 
$output = mb_decode_numericentity($str, $convmap, 'UTF-8'); 

此代码实际上你正在寻找(Demo)的转换,但是你首先应该为什么数字HTML实体提交澄清。

为您喜欢unicode的,我建议你使用UTF-8的网页:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

和形式:

<form action="" method="post" accept-charset="utf-8"> 

好运。

2

请在您的HTML(例如)

<meta http-equiv="Content-Type" content="text/html; charset=<your_charset>"> 

,并在你的数据库(例如在MySQL)

DEFAULT CHARACTER SET <your_charset> COLLATE <your_collate> 

它必须等于验证编码。

+1

为什么当我简单地尝试将html实体解码回php中的字符时它是相等的比较?我甚至没有把数据插入到数据库中。为了澄清,我不关心能够正确看到字符,只是PHP可以使用它。 Page charset = iso-8859-1 db charset = utf8 – Err 2012-04-09 05:36:37

+1

*“为什么当我简单地尝试将html实体解码回php中的字符进行比较时,它必须相等?”*因为不平等会发生以后再引发其他问题时,您需要确保将代码从一种表示转换为另一种表示,并且因为这些日子您需要一个非常好的理由来使用除unicode以外的其他任何地方。 – DCoder 2012-04-09 07:03:11

+0

我同意DCoder。现在我只使用unicode。 – 2012-04-09 07:44:33