我有一个php网络应用程序/工具,人们最终将数据粘贴到。数据最终变成XML,一旦保存,某些字符就会产生非常奇怪的字符。我不确定“”在复制粘贴之前是否看起来像那样。它可能就是这样解释的。它可能只是一个很长的“ - ”。无论如何,所有这些角色都非常奇怪。有没有办法轻易将它们剥离出来?
答案 0 :(得分:1)
在您的情况下,白名单可能更容易,而不是黑名单;即,列出可接受的字符并删除其余字符。您可以使用preg_replace
$str = preg_replace($str, "/[A-Za-z0-9'-._\(\)/");
|
V
add more chars here
答案 1 :(得分:1)
这是因为PHP使用8位编码,但您的数据很可能是用UTF-8编写的。你会发现Joel's article on Encoding很有启发性。
对于简短的回答,请尝试将其编码为UTF-8
<?php
$text = $entity['Entity']['title'];
echo 'Original : ', $text."<br />";
$enc = mb_detect_encoding($text, "UTF-8,ISO-8859-1");
echo 'Detected Encoding '.$enc."<br />";
echo 'Fixed Result: '.iconv($enc, "UTF-8", $text)."<br />";
?>
答案 2 :(得分:1)
当您看到以重音“A”或“a”开头的字符对时,通常意味着您正在看到一个字符,其实际编码为iso-8859-1,该软件认为它显示的是utf-8。
如果您要允许人们使用不支持XML的工具修改XML文档中的文本,则可能最终会使用iso-8859-1编码的字符。如果存在文件开头的XML声明并且说编码是iso-8859-1,那应该没问题。但是如果没有XML声明,或者声明中的编码是utf-8,那么你最终会得到损坏的数据。
您已经询问过如何修复数据,但是当您遇到数据损坏时,重点应始终放在预防上而不是修复上。