如何防止替换字符在PHP中变成html实体?
我正在处理一个MySQL数据库中的。。。如果它留在那里也没关系,但我正在尝试编辑它。我的表单将角色显示为带有问号的菱形(�). 因此,我提交表单,比较表单上的数据和数据中的数据,看看是否有变化。这里的问题是,当我提交表单时,它会将替换字符转换为�;,这是html实体等价物,因此当发生这种情况时,它会失败比较,并且代码认为字符串已发生变化,这就是有,但不是真的。我尝试过使用不同的方法,或者在比较时将替换字符从数据库转换为等价的html实体——它开始将另一个看似正常的字符转换为等价的html实体替换字符——以及将html实体转换为等价的替换字符aracter——这根本不起作用——但它们都失败了。是的,我试过html_entity_decode()和htmlspecialchars_decode()如何防止替换字符在PHP中变成html实体?,php,mysql,decode,Php,Mysql,Decode,我正在处理一个MySQL数据库中的。。。如果它留在那里也没关系,但我正在尝试编辑它。我的表单将角色显示为带有问号的菱形(�). 因此,我提交表单,比较表单上的数据和数据中的数据,看看是否有变化。这里的问题是,当我提交表单时,它会将替换字符转换为�;,这是html实体等价物,因此当发生这种情况时,它会失败比较,并且代码认为字符串已发生变化,这就是有,但不是真的。我尝试过使用不同的方法,或者在比较时将替换字符从数据库转换为等价的html实体——它开始将另一个看似正常的字符转换为等价的ht
我的问题是:如何防止替换字符变成html实体?请验证html上的编码(例如)
在数据库上(例如在MySQL中)
默认字符集整理
它必须相等。由于某种原因,webbrowser正在提交� 替换字符(U+FFFD),因为它是十进制的数字HTML实体:
&65533;
。可能您已经以这种方式将其输出到浏览器了
但是,如果希望输入包含HTML实体,如果不想将它们作为HTML存储到数据库中,则需要对它们进行解码。要解码输入UTF-8编码字符串中的数字实体$str
:
$convmap = array (0, 0x10FFFF, 0, 0xFFFFFF);
$output = mb_decode_numericentity($str, $convmap, 'UTF-8');
这段代码实际上完成了您想要的转换(),但是您应该首先澄清为什么要提交数字HTML实体
由于您更喜欢unicode,我建议您在网页中使用UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
至于表格:
<form action="" method="post" accept-charset="utf-8">
祝你好运。当它在PHP中时,或者当它被插入数据库时,它会变成HTML实体吗?所以我将我的网页编码更改为UTF-8,以使其与数据库编码匹配。我仍然无法解码HTML实体。我尝试了
mb\u decode\u numericentity($str,array(0xEF,0xBF,0xBD),'UTF-8'))
当我简单地尝试将html实体解码回php中的字符进行比较时,为什么它必须相等?我甚至还没有到将数据插入数据库的地步。我只是想澄清一下,我并不关心能否正确地看到字符,只是php可以使用它。Page charset=iso-8859-1 db charset=utf8“当我简单地尝试将html实体解码回php中的字符进行比较时,为什么它必须相等?”因为不平等将在以后引起其他问题,所以您需要确保在任何地方都从一种表示转换为另一种表示,并且因为现在您需要一个很好的理由在任何地方使用unicode以外的任何东西。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<form action="" method="post" accept-charset="utf-8">