Filter_var()将“”符号添加到“©”符号

时间:2017-03-15 16:35:39

标签: php

所以我有这段代码:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300" x:Name="win">
    <Window.Resources>
        <local:imgconverter x:Key="imgconverter" />
    </Window.Resources>
    <Grid>
        <Grid.Resources>
            <Image x:Key="img" Source="{Binding Path=DataContext.ImageSource,Converter={StaticResource imgconverter}, Source={x:Reference win}}">
                <Image.BitmapEffect>
                    <BlurBitmapEffect KernelType="Box" />
                </Image.BitmapEffect>
            </Image>
        </Grid.Resources>
        <Grid.Style>
            <Style TargetType="{x:Type Grid}">
                <Setter Property="Background">
                    <Setter.Value>
                        <VisualBrush Visual="{StaticResource img}" />
                    </Setter.Value>
                </Setter>
            </Style>
        </Grid.Style>
        <TextBlock Text="..." />
    </Grid>
</Window>

哪个会输出:

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;" 是字符&#194;,它不在原始文本中。

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

1 个答案:

答案 0 :(得分: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!),修复现在已损坏的“©”通过删除孤立的“”字形,然后再次运行脚本:

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

但这是一种限制。

阅读以下手册页以获取更多信息: