我有一个包含EM Dash(或—HTML)的ASCII文件.十六进制值为0x97.当我们通过一个应用程序传递此文件时,它以UTF-8的形式到达,并将字符转换为0xC297,它是—HTML格式的.但是,当我们通过另一个应用程序传递此文件时,它将字符转换为0xE28094或—.
什么会导致这些应用程序以不同方式转换这些字符 它可能是代码页设置吗?
鉴于某些多字节字符集,我是否正确假设以下内容不符合预期目的?
$string = str_replace('"', '\\"', $string);
Run Code Online (Sandbox Code Playgroud)
特别是,如果输入的字符集可能具有像0xbf5c这样的有效字符,那么攻击者可以注入0xbf22来获取0xbf5c22,留下一个有效字符后跟一个不带引号的双引号(").
有没有一种简单的方法来缓解这个问题,或者我是否首先误解了这个问题?
(在我的例子中,字符串进入HTML输入标签的value属性:echo'input type ="text"value ="'.$ string.'">';)
编辑:就此而言,像preg_quote()这样的函数呢?它没有charset论据,因此在这种情况下似乎完全没用.如果你没有选择将字符集限制为UTF-8(是的,这很好),你好像很残疾.在这种情况下可以使用哪些替换和引用功能?
我有一些希伯来网站,其中包含如下字符引用: נוף
如果我将文件保存为.html并以UTF-8编码查看,我只能查看这些字母.
如果我尝试将其作为常规文本文件打开,则UTF-8编码不会显示正确的输出.
我注意到如果我打开文本编辑器并以UTF-8编写希伯来语,在这个例子中每个字符占用两个字节而不是4个字节行(ו)
如果这是UTF-16或任何其他类型的UTF字母表示的任何想法?
如果可能,如何将其转换为普通字母?
使用最新的PHP版本.