用双引号括起字符串

时间:2014-04-15 05:29:07

标签: php string

我正在尝试处理可能包含单引号和其他特殊字符的文本。如果用单引号括起来,则不会继续。所以我试图将单引号字符串括在双引号字符串中。

我已经检查了以前的帖子。

以下是代码:

检查结果:http://ideone.com/gWFdUb

<?php
function clean($string) {
    eval('$string = "'.$string.'";');
   $string = str_replace(' ', ' ', $string); // Replaces all spaces with hyphens.
   return preg_replace('/[^A-Za-z0-9 @\-]/', '', $string); // Removes special chars.
}

$d =  clean('this was readlly n'ice 'test for@me to') ;
echo $d;

评估线有什么问题?

我正在处理用户推文,发布有两个目的。

  1. 存入mysql表。 (mysqli_real_escape)没有帮助
  2. 将每个字符串处理为文本以进行匹配和POS(词性)标记。
  3. 我因文字中的这些字符而陷入困境。所以在我开始处理之前尝试删除它。

    更新

    选中此处,此处我已使用mysqli_real_escape_String,即使脚本在到达此

    时停止
    ...
    mention-179
    May Thanks @ShaleMarkets @01Finser @52York @AB_CutRock @AFSPG @AJSmith222 @AlbertaEnergy @andymartin @annemullettamg @APGQ_officiel-440929408564477952-Tue Mar 04 19:18:57 +0000 2014-19:03:572014:03:04201403Adnan Aftab Nizamani0131
    
    mention-180
    Thank you for @ShaleMarkets, to promoting, thank you very much for an award. Glad to have been able to help you :)-440897048963850240-Tue Mar 04 17:10:22 +0000 2014-17:03:222014:03:04201403♘-₭ℜi℘-0582
    
    mention-181
    @ShaleMarkets https://t.co/aM8liykQqR-440890009273393152-Tue Mar 04 16:42:24 +0000 2014-16:03:242014:03:04201403Bre Burey018
    

    提到-181有什么问题让它卡住了?这是代码

        foreach ($tweets1 as $item)
        {       
            $count = $count + 1;
            $text = $item->text;
            //echo $userid.$text;
            $text_id = $item->id;
            $constant = 'mention';
            $time = $item->created_at;
            //echo $time;
            //$dt = new DateTime('@' . strtotime($time));
            $dt = \DateTime::createFromFormat('D M d H:i:s e Y', $time);
            //var_dump($dt);
            $tweet_time = $dt->format('H:m:s');
            $tweet_dtm = $dt->format('Y:m:d');
            $year =  $dt->format('Y'); 
            $month =  $dt->format('m'); 
            $user_name = $item->user->name;
    //      echo $year.$month.$user_name;
            $inreplyto =  $item->in_reply_to_screen_name;
            $rt_count = $item->retweet_count;
            $follower_count = $item->user->followers_count;
            echo $constant."-".$count."<br>".$text."-".$text_id."-".$time."-".$tweet_time.$tweet_dtm.$year.$month.$user_name.$rt_count.$follower_count."<br>";
            echo "<br>";
            $con = mysqli_connect('127.0.0.1', 'root', 'root', 'root');         
            if (mysqli_connect_errno())
            {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
                return;
            }
            $text = mysqli_real_escape_string($con,$text);
            $insertQuery1 = "INSERT INTO twitter_mention(`username`,`userid`,`tweet_text`,`text_id`,`time`,`month`,`year`,`date`,`user_follower_count`,`rt_count`,`constant`,`in_reply_to`) VALUES ('".$twitteruser."','".$userid."','".$text."','".$text_id."','".$tweet_time."','".$month."','".$year."','".$tweet_dtm."','".$follower_count."','".$rt_count."','".$constant."','".$inreplyto."')";
    
            if (!mysqli_query($con,$insertQuery1))
            {
            //  die('Error: ' . mysqli_error($con));
            //  echo "error";
            }
    

3 个答案:

答案 0 :(得分:4)

在这个答案中,我将尝试解决您的原始问题:

  

评估线有什么问题?

无。倒数第二行是唯一包含语法错误的行。您没有正确地转义单引号。请尝试以下方法:

$d = clean('this was readlly n\'ice \'test for@me to');

它现在应该产生这个输出:

this was readlly nice test for@me to

我不确定这是否是预期的结果。如果你更新问题以包括你想要实现的目标,并且你为什么要关注字符串包含在哪种类型的引号,也许我可以帮你找到解决方案。

答案 1 :(得分:4)

始终使用上下文转义

你不能一般地&#34;清洁&#34;数据没有任何关于它的内容的背景。不要尝试构建单个函数来处理所有可能的情况。只是不要。这毫无意义。在您的功能中,您正在尝试&#34; 清理&#34;删除某些字符的字符串。 您无法通过移除一组字符来清理字符串。这个想法存在缺陷,因为您总是不得不允许使用某些语法中特殊的某些字符或者另一个。

相反,请根据要使用的上下文处理字符串。例如:

进一步阅读:

答案 2 :(得分:1)

试试这个 -

<?php
function clean($string) {
    eval("\$string = \"$string\";");
   $string = str_replace(' ', ' ', $string); // Replaces all spaces with hyphens.
   return preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $string); // Removes special chars.
}

$d =  clean("this was readlly n'ice 'test for@me to") ;
echo $d;
?>

输出为 - this was readlly nice test forme to