所以我有这段代码:
<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) " Look ma, there are special characters: "'&©"
是字符Â
,它不在原始文本中。
我的问题:为什么会发生这种情况,如何删除额外的Â
字符?
答案 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) " Look ma, there are special characters: "'&┬®"
下一步该做什么取决于您的要求。我怀疑filter_var
不是你想要的,如果你也想处理Unicode字符。
如果ANSI对您来说足够了,我发现快速解决方法是将我的PHP源文件的编码更改为ANSI模式(不 UTF-8!),修复现在已损坏的“©”通过删除孤立的“”字形,然后再次运行脚本:
// string(65) " Look ma, there are special characters: "'&©"
但这是一种限制。
阅读以下手册页以获取更多信息: