URL文字列をカプセル化するために必要な一重引用符が欠落しているためです。
$url = "http://www.google.com";
$button .=
'<input type="button" value="Print Timetable" class="printButton" onclick="window.open(\''.$url.'\');"/>';
文字列のカプセル化のレイヤーを追加しています。文字列値を関数に渡すときは、文字列であるため、引用符で囲む必要があります。
doSomething('http://www.ibm.com/');
HTMLでこれをインラインで実行する場合は、JavaScriptを二重引用符で囲んでカプセル化する必要があります。
onclick="doSomething('http://www.ibm.com/');";
次に、PHPでそれをエコーしたり、変数として割り当てたりする場合は、すべてを引用符で囲む必要があります。これにより、次のことが可能になります。
<?php
//encapsulate in double quotes and escape double quotes
echo " onclick=\"doSomething('http://www.ibm.com/');\" ";
//encapsulate in single quotes and escape single quotes
echo ' onclick="doSomething(\'http://www.ibm.com/\'); ';
?>
どのように分解しても、3つの文字列カプセル化を相互に埋め込む必要があるため、JSで使用される引用符とPHPで使用される引用符を区別する方法を見つける必要があります。
そうしないと、問題が発生します。
<?php
//Houston We have a problem!
echo " onclick="doSomething('http://www.ibm.com/');\" ";
^ ^ ^ ^
Open Quote Close Quote Open Quote Close Quote
?>