从php字符串中删除奇怪的字符

时间:2009-07-27 15:58:24

标签: php

这就是我现在所拥有的

将RSS源绘制到php中,来自rss源的原始xml读取:

Paul’s Confidence

我到目前为止的PHP就是这个。

$newtitle = $item->title;
$newtitle = utf8_decode($newtitle);

以上回报;

Paul?s Confidence

如果我删除utf_decode,我会得到这个

Paul’s Confidence

当我尝试str_replace时;

$newtitle = str_replace("”", "", $newtitle);

它不起作用,我明白了;

Paul’s Confidence

有什么想法吗?

14 个答案:

答案 0 :(得分:19)

无论编码如何,这都是我的功能:

function RemoveBS($Str) {  
  $StrArr = str_split($Str); $NewStr = '';
  foreach ($StrArr as $Char) {    
    $CharNo = ord($Char);
    if ($CharNo == 163) { $NewStr .= $Char; continue; } // keep £ 
    if ($CharNo > 31 && $CharNo < 127) {
      $NewStr .= $Char;    
    }
  }  
  return $NewStr;
}

工作原理:

echo RemoveBS('Hello õhowå åare youÆ?'); // Hello how are you?

答案 1 :(得分:17)

试试这个:

$newtitle = html_entity_decode($newtitle, ENT_QUOTES, "UTF-8")

如果这不是解决方案,请浏览此页面http://us2.php.net/manual/en/function.html-entity-decode.php

答案 2 :(得分:10)

这将从字符串中删除所有非ascii字符/特殊字符。

&#13;
&#13;
//Remove from a single line string
$output = "Likening ‘not-critical’ with";
$output = preg_replace('/[^(\x20-\x7F)]*/','', $output);
echo $output;
 
//Remove from a multi-line string
$output = "Likening ‘not-critical’ with \n Likening ‘not-critical’ with \r Likening ‘not-critical’ with. ' ! -.";
$output = preg_replace('/[^(\x20-\x7F)\x0A\x0D]*/','', $output);
echo $output;
&#13;
&#13;
&#13;

答案 3 :(得分:9)

我解决了这个问题。似乎是一个简短的修复而不是更大的问题,但它确实有效。

$newtitle = str_replace('’', "'", $newtitle);

我还发现这个有用的snippit可以帮助其他人解决同样的问题;

<?
$find[] = '“'; // left side double smart quote
$find[] = 'â€'; // right side double smart quote
$find[] = '‘'; // left side single smart quote
$find[] = '’'; // right side single smart quote
$find[] = '…'; // elipsis
$find[] = '—'; // em dash
$find[] = '–'; // en dash

$replace[] = '"';
$replace[] = '"';
$replace[] = "'";
$replace[] = "'";
$replace[] = "...";
$replace[] = "-";
$replace[] = "-";

$text = str_replace($find, $replace, $text);
?>

感谢大家的时间和考虑。

答案 4 :(得分:7)

  

是的,这对我不起作用。这是什么解决方法? - vaichidrewar 3月12日22:29

将其添加到HTML头部(或者如果已经存在则修改):

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

这会将有趣的字符编码为“â”,将其编码为UTF-8,以便str_replace()函数能够正确解释它们。

或者你可以这样做:

ini_set('default_charset', 'utf-8');

答案 5 :(得分:2)

PHP服务器的字符编码设置是否为UTF-8以外的设置?如果是这样,是否有理由或者可以改为UTF-8?虽然我们没有在我们的数据库中以UTF-8存储数据,但我发现将web服务器的字符集设置为UTF-8似乎有助于解决字符集问题。

我有兴趣听听别人对此的看法......我是否通过将webserver设置为UTF-8,同时将提交的数据存储在我们的mysql数据库中的Latin1中来解决问题。我知道我选择Latin1作为数据库是有原因的,但不记得它是什么。有趣的是,我们当前的设置似乎允许非UTF-8字符输入和后续渲染...似乎在Latin1中存储不会阻止后续解码和显示所有UTF-8字符?

答案 6 :(得分:2)

使用以下PHP代码删除

html_entity_decode(mb_convert_encoding(stripslashes($name), "HTML-ENTITIES", 'UTF-8'))

答案 7 :(得分:1)

阅读http://us.php.net/manual/en/function.html-entity-decode.php

那&amp;符号是一个HTML代码,因此您可以轻松解码它。

答案 8 :(得分:0)

它不起作用 你需要使用 $ arr1 = str_split($ str) 然后foreach和 回波($ ARR1 [$ K]) 这将显示您确切地将哪些字符写入字符串。

答案 9 :(得分:0)

超级简单的解决方案是在加载页面时解码字符

只需在脚本开头复制/粘贴以下内容

即可
 header('Content-Type: text/html; charset=UTF-8');

 mb_internal_encoding('UTF-8');  
 mb_http_output('UTF-8'); 
 mb_http_input('UTF-8');  
 mb_regex_encoding('UTF-8');
  

参考:http://php.net/manual/en/function.mb-internal-encoding.php   webfav在web dot de留下的评论

答案 10 :(得分:0)

public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    Location mLocal = ((MainActivity)getActivity).getMLocal(); //you can get your Location object and you can use it further
        //LatLng origin = new LatLng(14.507328, 121.000905);

        mMap.addMarker(new MarkerOptions()
                .position(new LatLng(14.507577, 121.004456))
                .anchor(0.5f, 0.5f)
                .title("title")
                .snippet("snippet")
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));

答案 11 :(得分:0)

通过应用许多奇怪的字符被删除 mysqli_set_charset($con,"utf8");  mysql连接代码下方。

但是在某些情况下,会删除这种奇怪的字符,例如â€

我们需要使用:$title = ' Stefen Suraj'; $newtitle = preg_replace('/[^(\x20-\x7F)]*/','', $title); echo $newtitle;

输出将为:Stefen Suraj

答案 12 :(得分:0)

1。$ find数组中字符串的顺序很重要。 2.此字符串“—应包含一个代字号,看起来像三个字符。如果使用Genie编辑器保存.php文件,则其gits更改为仅两个字符“—。 3.这是一个有用的参考文献https://www.i18nqa.com/debug/utf8-debug.html

<?php
$text = "‘’“â€1‘ 2’ 3â€â€œâ€™â€˜ 4’ 5 6 7’ ‘, ’, “, â€â€˜";
echo($text . "<br>");
$find = array("‘", "’", "“", "â€");
$replace = array("‘", "’", "“", "”");
$text = str_replace($find, $replace, $text);
echo($text);
?>

答案 13 :(得分:-1)

只需一个简单的解决方案。

如果你的字符串包含这些类型的奇怪字符 假设$text包含其中一些,那么就像下面所示:

$mytext=mb_convert_encoding($text, "HTML-ENTITIES", 'UTF-8')

它会起作用..