Jump to content

problem when parsing the " ' " character


randomsai

Recommended Posts

when i try to parse  for example, friend's, it comes out like this ..... "friend ’s"

any recommendations?

thanks in advance

 

does it have a function for special characters

btw the code looks like below:

 

<?PHP

HEADER('content-type: text/plain');

 

// define hooks to rss_parser class as xml functions do not allow object methods as handlers.

FUNCTION rss_start_element($parser, $name, $attributes) {

  GLOBAL $rss;

  $rss->start_element($parser, $name, $attributes);

}

 

FUNCTION rss_end_element($parser, $name) {

  GLOBAL $rss;

  $rss->end_element($parser, $name);

}

 

FUNCTION rss_character_data($parser, $data) {

  GLOBAL $rss;

  $rss->character_data($parser, $data);

}

 

 

CLASS rss_parser {

 

// constructor. setup parser options and handlers.

FUNCTION rss_parser() {

  $this->error = '';

  $this->file = '';

 

  $this->channel = ARRAY();

  $this->data = '';

  $this->stack = ARRAY();

  $this->num_items = 0;

 

  $this->xml_parser = XML_PARSER_CREATE();

  XML_SET_ELEMENT_HANDLER($this->xml_parser, "rss_start_element", "rss_end_element");

  XML_SET_CHARACTER_DATA_HANDLER($this->xml_parser, "rss_character_data");

}

 

FUNCTION character_data($parser, $data) {

  IF (EMPTY($this->data)) $this->data = TRIM($data);

  ELSE $this->data .= ' '.TRIM($data);             

}

 

FUNCTION start_element($parser, $name, $attrs) {

  SWITCH($name) {

    CASE 'RSS':

      BREAK;

 

    CASE 'CHANNEL':

      BREAK;

 

 

    CASE 'ITEM':

      ARRAY_PUSH($this->stack, $name);

      ARRAY_PUSH($this->stack, $this->num_items); // push item index.

      $this->item[$this->num_items] = ARRAY();

      $this->num_items++;

      BREAK;

 

    CASE 'TEXTINPUT':

      ARRAY_PUSH($this->stack, $name);

      BREAK;

 

    DEFAULT:

      ARRAY_PUSH($this->stack, $name);

      BREAK;

 

  } 

}

 

FUNCTION end_element($parser, $name) {

  SWITCH ($name) {

    CASE 'RSS':

      BREAK;

 

    CASE 'CHANNEL':

      BREAK;

 

 

    CASE 'ITEM':

      ARRAY_POP($this->stack);

      ARRAY_POP($this->stack);

      BREAK;

 

    CASE 'TEXTINPUT':

      ARRAY_POP($this->stack);

      BREAK;

 

    DEFAULT: // child element.

      $element = (IMPLODE("']['",$this->stack));     

      EVAL("\$this->channel['$element']=\$this->data;"); // this does all the hard work.

      ARRAY_POP($this->stack);

      $this->data = '';

      BREAK;

  }

}

 

 

 

FUNCTION parse() {

  IF (!($fp = @FOPEN($this->file, "r"))) {

    $this->error = "Could not open RSS source \"$this->file\".";

    RETURN FALSE;

  }

  WHILE ($data = FREAD($fp, 4096)) {

    IF (!XML_PARSE($this->xml_parser, $data, FEOF($fp))) {

      $this->error = SPRINTF("XML error: %s at line %d.",

        XML_ERROR_STRING(XML_GET_ERROR_CODE($this->xml_parser)),

        XML_GET_CURRENT_LINE_NUMBER($this->xml_parser));

      RETURN FALSE;

    }

  }

  XML_PARSER_FREE($this->xml_parser);

  RETURN TRUE;

}

 

 

 

$rss = NEW rss_parser();

$rss->file = 'http://www.trinidadnews.net/rss.php';

$rss->parse() or DIE($rss->error);

IF ($rss->error) PRINT $rss->error;

 

PRINT_R($rss->channel);

 

$i =0;

do

{

$infoArray = $rss->channel;

$headline = $infoArray['ITEM'][$i]['TITLE'];

$description = $infoArray['ITEM'][$i]['DESCRIPTION'];

$date = $infoArray['ITEM'][$i]['PUBDATE'];

 

$con = mysql_connect("localhost", "root", "");

if (!$con)

  {

  die('Could not connect: ' . mysql_error());

  }

mysql_select_db("trinidadnews", $con);

mysql_query("INSERT INTO news (headline, description, date) VALUES ('$headline' , '$description' , '$date')");

 

mysql_close($con);

 

$i++;

}

 

while ($i<=15);

 

?>

Link to comment
https://forums.phpfreaks.com/topic/187362-problem-when-parsing-the-character/
Share on other sites

This post has probably been ignored for so long because of the large amount of code. If  posting code like this is necessary using the code tags will make people a lot more amiable/helpful.  I would guess (looking at your output) that the character in question is not a standard single quote or apostrophe character but rather one of the fancier formatted characters from a different character set (some form of Unicode, multi-byte character). I have myself ran into a problem with these when importing a table from the clipboard which has been copied from Microsoft Word. The way I fixed it was to find out exactly what character it was and replace them within the string.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.