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.

General Questions

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

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

String variable cannot stand on both sides of assignment


5 Posts   871 Views


29 October 2009 at 1:56am (Last edited: 29 October 2009 1:59am), Community Member, 4 Posts

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.


29 October 2009 at 6:12pm Forum Moderator, 5511 Posts

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 ', ';


4 November 2009 at 10:44pm (Last edited: 4 November 2009 10:49pm), Community Member, 4 Posts

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.


4 November 2009 at 11:08pm Community Member, 4 Posts

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.


25 November 2009 at 11:40pm Community Member, 4 Posts

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!