浏览器/PHP如何处理字符集以外的字符?

浏览器/PHP如何处理字符集以外的字符?,php,html,character-encoding,Php,Html,Character Encoding,我正在研究如何处理页面字符集之外的字符 在本例中,页面设置为iso-8859-1,之前的程序员决定使用htmlentities($string,ENT_COMPAT)转义输入。然后将其存储到Mysql中的Latin1表中 由于表被设置为与页面相同的字符集,我想知道是否需要htmlentities步骤。 我做了一些实验,似乎拉丁语1中的一些字符被转义了,但例如捷克语的名字就不是 这是因为这些字符不属于拉丁语1吗?如果是这样,那么htmlentities就可以被删除,因为它对Latin1之外的内容没

我正在研究如何处理页面字符集之外的字符

在本例中,页面设置为iso-8859-1,之前的程序员决定使用htmlentities($string,ENT_COMPAT)转义输入。然后将其存储到Mysql中的Latin1表中

由于表被设置为与页面相同的字符集,我想知道是否需要htmlentities步骤。 我做了一些实验,似乎拉丁语1中的一些字符被转义了,但例如捷克语的名字就不是


这是因为这些字符不属于拉丁语1吗?如果是这样,那么htmlentities就可以被删除,因为它对Latin1之外的内容没有任何帮助,而在Latin1中,就我现在所见,它是不需要的…

htmlentities只翻译它知道的字符(
get\uHTML\u translation\u table(html\u ENTITIES)
返回整个列表),其余部分保持原样。所以你是对的,将其用于非拉丁语数据毫无意义。此外,对数据库条目进行html编码和使用拉丁语都是不好的主意,我建议将两者都去掉


警告:删除htmlentities()后,请记住,对于要插入DB中的数据(mysql_escape_字符串或类似内容),仍然需要对其进行转义引号。

htmlentities只翻译它知道的字符(
get_html_translation_table(html_ENTITIES)
返回整个列表),其余部分保持原样。所以你是对的,将其用于非拉丁语数据毫无意义。此外,对数据库条目进行html编码和使用拉丁语都是不好的主意,我建议将两者都去掉


警告一句:删除htmlentities()后,请记住,对于要插入DB中的数据(mysql_escape_string或类似内容),您仍然需要转义引号。

他本可以将其用作基本的安全预防措施,即防止用户将HTML/Javascript插入输入(因为也将被转义)


顺便说一句,如果你想支持东欧和西欧语言,我建议使用UTF-8作为默认字符编码。

他可以将其用作基本的安全预防措施,即防止用户将HTML/Javascript插入输入(因为也将被转义)

顺便说一句,如果您想支持东欧和西欧语言,我建议使用UTF-8作为默认字符编码。


虽然不是因为捷克字符在拉丁1之外,而是因为它们在表格中的位置相同。所以,数据库将其作为相应的拉丁字符

使用htmlentities总是不好的。存储不同语言的唯一正确解决方案是使用UTF-8字符集。


虽然不是因为捷克字符在拉丁1之外,而是因为它们在表格中的位置相同。所以,数据库将其作为相应的拉丁字符

使用htmlentities总是不好的。存储不同语言的唯一正确解决方案是使用UTF-8字符集。

请注意,字符集有第三个参数(自PHP 4.1.0以来)。ISO-8859-1是默认值,因此,例如,如果对UTF-8字符串应用htmlentities而不使用第三个参数,则输出将被破坏

您可以使用和检测并转换输入字符串,以确保输入字符串与所需的字符集匹配。

请注意,该字符集有第三个参数(自PHP 4.1.0以来)。ISO-8859-1是默认值,因此,例如,如果对UTF-8字符串应用htmlentities而不使用第三个参数,则输出将被破坏


您可以使用和检测并转换输入字符串,以确保输入字符串与所需的字符集匹配。

出于安全原因,应改用htmlspecialchars。不是在插入时,而是在显示时。如果可以避免的话,不要把输入搞得一团糟,只在sql注入时过滤“只在sql注入时过滤”呃,你们听说过XSS攻击吧?除了检查sql注入之外,还有更多关于安全性的内容。顺便说一句,这只是对程序员使用htmlspecialchars的动机的基本猜测,而不是我自己对如何实现安全性的看法……出于安全原因,应该使用htmlspecialchars。不是在插入时,而是在显示时。如果可以避免的话,不要把输入搞得一团糟,只在sql注入时过滤“只在sql注入时过滤”呃,你们听说过XSS攻击吧?除了检查sql注入之外,还有更多关于安全性的内容。顺便说一句,这只是对程序员使用htmlentities的动机的一个基本猜测,而不是我自己对如何实现安全性的看法……谢谢,这就是我想要的。至于其他的评论,我知道utf-8,但那是以后的事了,现在我需要解决手头的问题,那就是清除数据库中逃逸的东西,我需要知道我是否在正确的轨道上是的,数据库中HTML编码的数据是一种巨大的代码气味
htmlspecialchars
应该在将文本放入HTML页面时调用,而与数据层无关。摆脱@马腾:别忘了你的数据还需要转义(见答案更新)。谢谢,这就是我一直在寻找的。至于其他的评论,我知道utf-8,但那是以后的事了,现在我需要解决手头的问题,那就是清除数据库中逃逸的东西,我需要知道我是否在正确的轨道上是的,数据库中HTML编码的数据是一种巨大的代码气味
htmlspecialchars
应该在将文本放入HTML页面时调用,而与数据层无关。摆脱@马腾:别忘了你的数据仍然需要转义(请参阅答案更新)。mb_detect_编码永远都不可信,也毫无用处。页面的内容类型是足够的内容类型通常足够了,但如果输入是用户定义的,则字符串可以位于与co不同的字符集中