2017-03-15 52 views
0

所以我有这样的代码:Filter_var()被添加了 “A” 符号 “©” 符号

var_dump(trim(filter_var("\nLook ma, there are special characters:\n<>\"'&©", FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW | FILTER_FLAG_ENCODE_HIGH))); 

将输出这样的:

string(66) "&#10;Look ma, there are special characters:&#10;&#34;&#39;&&#194;&#169;" 

的问题是,enocoded字符&#194;是字符Â,它不在原始文本中。

我的问题:为什么会发生这种情况,以及如何删除多余的Â字符?

+0

什么是你正在试图解决的实际问题?你的目标是什么? –

+1

不确定它的锤子值得,但这是高度相关http://stackoverflow.com/questions/279170/utf-8-all-the-way-through – Machavity

回答

1

这不是一个额外的字符;它是多字节Unicode字符的第一个字节。

实际上,您通过为其提供FILTER_FLAG_ENCODE_LOW | FILTER_FLAG_ENCODE_HIGH标志表达式来要求函数执行此操作。

如果你不编码“高”的价值观,其结果的变化,但仍然不是非常有用:

var_dump(trim(filter_var("\nLook ma, there are special characters:\n<>\"'&©", FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW))); 
// string(61) "&#10;Look ma, there are special characters:&#10;&#34;&#39;&┬®" 

下一步做什么取决于你的需求。我怀疑filter_var不是你要找的,如果你想处理Unicode字符。

如果ANSI足够你,我发现,速战速决是我的PHP源文件的编码更改为ANSI模式( UTF-8!),通过去除固定现已打破“©”字形孤立的“A”,并再次运行该脚本:

// string(65) "&#10;Look ma, there are special characters:&#10;&#34;&#39;&&#169;" 

但是,这是一种限制。

必须通过以下手册页读的详细资料:

+0

那么,这绝对解释了为什么(+1),我仍然需要知道如何删除角色。我会猜测'mb_convert_encoding()'会修正它,但是我不太了解字符编码知道将其转换为。 (如果有帮助,我编辑UTF-8模式的文件) –

+0

我们需要具体了解你的目标是什么,具体来说你的要求是什么。你想用哪些字符做什么?为什么? –

+0

ascii范围对我来说已经足够了,我不需要支持用户输入该范围以外的字符。 (但是,我确实需要在源代码中支持UTF-8) –