如何删除奇怪的复制粘贴字符,如:â€

时间:2011-03-10 18:44:25

标签: php xml special-characters sanitization

我有一个php网络应用程序/工具,人们最终将数据粘贴到。数据最终变成XML,一旦保存,某些字符就会产生非常奇怪的字符。我不确定“”在复制粘贴之前是否看起来像那样。它可能就是这样解释的。它可能只是一个很长的“ - ”。无论如何,所有这些角色都非常奇怪。有没有办法轻易将它们剥离出来?

3 个答案:

答案 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,那么你最终会得到损坏的数据。

您已经询问过如何修复数据,但是当您遇到数据损坏时,重点应始终放在预防上而不是修复上。