Dass immer noch alles zusammen geschrieben raus kommt, glaub ich ja nun nicht so richtig.
PHP-Code:
$string = "Hallo, an alle in dieser Welt!";
$sprache = "de";
setlocale(LC_CTYPE, "de_DE"); //Dies in deinem Script notieren ansonsten werden dir auch alle Umlaute mit entfernt
$entf[0] = "/\W/"; //entfernt alle Sonderzeichen aus deinem Satz, auch Leerzeichen
$einf[0] = " "; //setzt für alle entfernten Sonderzeichen ein Leerzeichen ein
$entf[1] = "/( ){2,}/"; //ersetzt alle doppelten Leerzeichen
$einf[1] = " "; //durch ein Leerzeichen
$entf[2] = "/( )$/"; //ersetzt ein Leerzeichen am Ende
$einf[2] = ""; //durch nichts
$entf[3] = "/ /"; //ersetzt alle Leerzeichen
$einf[3] = "' and sprache <> '$sprache') or (wort = '"; //mit diesem
print $satz = preg_replace($entf, $einf, $string);
so sieht dann die Ausgabe aus:
Hallo' and sprache <> 'de') or (wort = 'an' and sprache <> 'de') or (wort = 'alle' and sprache <> 'de') or (wort = 'in' and sprache <> 'de') or (wort = 'dieser' and sprache <> 'de') or (wort = 'Welt
Wenn du vor dem letzten Durchlauf mehr als ein Leerzeichen zwischen den Worten hast würde dir ($einf[3]) genau so oft eingesetzt werden wie Leerzeichen vorhanden sind.
Du musst nicht zwingend Leerzeichen nehmen. Ein anderes Zeichen machts auch. Es muss halt eindeutig sein.