Php 诸如ÖÄÅ;

Php 诸如ÖÄÅ;,php,character-encoding,Php,Character Encoding,我的表格 <form action="saveProfile.php" method="post" name="ProfileUpdate" id="ProfileUpdate" > <input name="Smeknamn" id="Smeknamn" type="text" value="<?php echo $v["user_name"]; ?>" maxlength="16" id="ctl00_ctl00_cphContent_cphContent_cp

我的表格

<form action="saveProfile.php" method="post" name="ProfileUpdate" id="ProfileUpdate" >
<input name="Smeknamn" id="Smeknamn" type="text" value="<?php echo $v["user_name"]; ?>" maxlength="16" id="ctl00_ctl00_cphContent_cphContent_cphContentLeft_tbUsername" onkeydown="return ((event.keyCode != 16) || (event.keyCode == 16 &amp;&amp; this.value.length >= 1));" style="width: 130px;" />
</form>

尝试将
editProfile.php
saveProfile.php
编码为带BOM的UTF-8。

尝试将
editProfile.php
saveProfile.php
编码为带BOM的UTF-8。

这是一个字符编码问题

我猜您的数据实际上是用UTF-8编码的,因此字符
Ö
(U+00D6)是用0xC396编码的。现在,如果在不指定charset参数的情况下调用,则隐式使用ISO 8859-1:

[…]可选的第三个参数
charset
,用于定义转换中使用的字符集。目前,ISO-8859-1字符集用作默认字符集

当用ISO 8859-1解释字节序列0xC396时,它表示两个ISO 8859-1字符0xC3和0x96。由于存在ISO 8859-1字符0xC3的实体Atilde,因此该字符将替换为
htmlentities
,并引用
Ã。但是没有任何实体表示第二个字符0x96,因此不会替换它。这意味着:

htmlentities("\xC3\x96") === "&Atilde;\x96"
现在,当用户代理对此进行解释时,字符引用将正确显示,但剩余字节0x96不是UTF-8中字符的有效字节序列。这就是替换字符

因此,问题是您没有为
htmlentities
指定正确的字符编码:

htmlentities("\xC3\x96", ENT_COMPAT, "UTF-8") === "&Ouml;"
但是,由于您已经在使用UTF-8进行输出,因此不需要替换这些字符,而使用READ就足以替换HTML特殊字符


但是除此之外,您不应该使用这样一个通用的过滤函数,因为每种语言和上下文都有自己的特殊字符需要处理。

这是一个字符编码问题

我猜您的数据实际上是用UTF-8编码的,因此字符
Ö
(U+00D6)是用0xC396编码的。现在,如果在不指定charset参数的情况下调用,则隐式使用ISO 8859-1:

[…]可选的第三个参数
charset
,用于定义转换中使用的字符集。目前,ISO-8859-1字符集用作默认字符集

当用ISO 8859-1解释字节序列0xC396时,它表示两个ISO 8859-1字符0xC3和0x96。由于存在ISO 8859-1字符0xC3的实体Atilde,因此该字符将替换为
htmlentities
,并引用
Ã。但是没有任何实体表示第二个字符0x96,因此不会替换它。这意味着:

htmlentities("\xC3\x96") === "&Atilde;\x96"
现在,当用户代理对此进行解释时,字符引用将正确显示,但剩余字节0x96不是UTF-8中字符的有效字节序列。这就是替换字符

因此,问题是您没有为
htmlentities
指定正确的字符编码:

htmlentities("\xC3\x96", ENT_COMPAT, "UTF-8") === "&Ouml;"
但是,由于您已经在使用UTF-8进行输出,因此不需要替换这些字符,而使用READ就足以替换HTML特殊字符


但是除此之外,你不应该使用这样一个通用的过滤函数,因为每种语言和上下文都有自己需要注意的特殊字符。

你是否考虑过将一些内联Javascript移到一个单独的脚本文件中?将来,请考虑将该信息添加到Karem,而不是创建一个副本。@您的HTML代码有一个Meta标签,指定了编码。对不起,问题已经更新,我现在发现了问题所在。请检查一下。你有没有考虑将一些内联的JavaScript移动到一个单独的脚本文件?在将来,请考虑把那个信息添加到你而不是创建一个副本。@ Karem - <代码> OnKekOnt[/Cord]属性包含JavaScript。你的HTML有一个指定编码的元标签吗?对不起,问题已经被更新了,我现在发现了问题的症结所在。请检查一下。+1:看起来确实像是编码混乱。特别是,saveProfile.php似乎在回显UTF-8编码的数据,但却声明它是其他数据,例如ISO 8859-1。请注意,默认编码是ISO 8859-1。很多人似乎仍然误解了这一点,而浏览器制造商对此的猜测也没有帮助。呃。对不起,请检查我更新的问题,我的错我没有提到foreach循环,它不是编码…+1:看起来确实像编码混乱。特别是,saveProfile.php似乎在回显UTF-8编码的数据,但却声明它是其他数据,例如ISO 8859-1。请注意,默认编码是ISO 8859-1。很多人似乎仍然误解了这一点,而浏览器制造商对此的猜测也没有帮助。对不起,请检查我更新的问题,是我的错,我没有提到foreach循环,不是编码。。