Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

String variable cannot stand on both sides of assignment

Go to End

5 Posts   1223 Views


Community Member, 4 Posts

29 October 2009 at 1:56am

Edited: 29/10/2009 1:59am

This is the code I'm using:

public function getAuthorsString($authors) {
      $result = "";
      if ($authors->exists())
      foreach ($authors as $authorKey => $author) {
         $result = $result."{$author->ForeName} {$author->SurName}, ";
      $result = rtrim(trim($result), ",");
      return $result;

The $authors variable is a DataObjectSet, and this line is the problem:
$result = $result."{$author->ForeName} {$author->SurName}, ";

I also tried:
$result .= "{$author->ForeName} {$author->SurName}, ";

$result = "{$result}{$author->ForeName} {$author->SurName}, ";

None of them work. But if I only assign without maintaining the last value, therefore ultimately returning only the last author:
$result = "{$author->ForeName} {$author->SurName}, ";

It works perfectly fine.
The error I'm getting is this:
error on line 33 at column 266: Encoding error

Please help me, I have no idea what to do.


Forum Moderator, 5523 Posts

29 October 2009 at 6:12pm

What are you trying to output? I assume you would want something like "John Smith, Joe Bloggs".

I'm also assuming that author isn't a Member object (because then you could just use $member->Name).

I would write that concatenation like

$result .= $author->ForeName . ' ' . $author->SurName ', '; 


Community Member, 4 Posts

4 November 2009 at 10:44pm

Edited: 04/11/2009 10:49pm

EDIT: I deleted this post because I realized I was/am stupid >_> The error should be exactly what it said it was: A problem with the encoding in the database. I'm gonna investigate and post again.


Community Member, 4 Posts

4 November 2009 at 11:08pm

I have now changed all of my database to use utf8_general_ci, but that didn't work.
I use the assignment

$result .= $author->Name() . ', ';
and the Name() function looks like this:
public function Name() {
   $result = $this->ForeName . ' ' . $this->SurName;
   return $result;

The error seems to occur when a string pulled from the database hits a string defined in my code, but I have no idea what to do about it.


Community Member, 4 Posts

25 November 2009 at 11:40pm

I have now changed servers and am working with a fresh mysql database and look what happened! I can't even use simple strings anymore without producing an Encoding Error. My template looks like this (this is inside a <table>):

<% control CatalogueMedia %>
   <td><% control Authors %>
      $ForeName $SurName,
   <% end_control %></td>
<% end_control %>

So i tried this, and the usual Encoding Error popped up. Then I replaced the inner <% control %> with static text, but $Title alone produced the error again! I then replaced $Title with static text and got exactly as many table rows as I have entries in my table. What is going on? I have no idea what to do at this point. Please help me!