Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
- Links zu: Aktiven | Unbeantworteten
- Übersicht
- »
- »
1
#1 12. Juni 2011 18:37
- NaN
- Moderator

- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.058
Re:
Kann mir jemand sagen, was an diesen regulären Ausdrücken falsch ist?
{$content|regex_replace:"/<p>[\s\t\n\r]*<\/p>/":""}{$content|regex_replace:"/<p> *<\/p>/":""}{$content|regex_replace:"/<p>\s*<\/p>/":""}{$content|regex_replace:"/<p>( )*<\/p>/":""}(ich will alle leeren Absätze löschen)
Irgendwie erkennt Smarty hier nichts.
Leere Absätze werden einfach weiterhin ausgegeben.
Das hier funktioniert hingegen:
{$content|regex_replace:"/<p>/":""}{$content|regex_replace:"/<p>[\s\t\n\r]*</":""}oder merkwürdigerweise das hier:
{$content|regex_replace:"/<p>(.*)<\/p>":""}Aber das bringt mich nicht weiter.
Sobald ich im Suchausdruck nur nach "<p> </p>" suche, spinnt Smarty rum und liefert mir falsche Ergebnisse.
Entweder löscht er alle Paragraphen oder garkeinen.
Mit diesem hier:
{$content|replace:"<p></p>":''|replace:"<p> </p>":''|replace:"<p> </p>":''}hab ich das gleiche Problem. (gibt's angeblich nicht ...)
Smarty will offenbar partout keine leeren Absätze erkennen.
Das frustiert mich gerade ungemein.
Module: GBFilePicker, AdvancedContent, FEUMailer
Plugins: AjaxTools, XajaxTools
Sicherheit: Beispiel .htaccess-Datei
Offline
#2 12. Juni 2011 20:30
- nicmare
- Server-Pate

- Registriert: 15. Dezember 2010
- Beiträge: 1.316
- Webseite
Re:
ich hasse regex! mal auf nils warten. ich glaube der ist da experte 
Meine Projekte:
Dashcam-Test | Babyphone-Testberichte | Türspionkameras
Offline
#3 13. Juni 2011 22:07
- nhaack
- Server-Pate

- Ort: Bonn
- Registriert: 12. Dezember 2010
- Beiträge: 171
- Webseite
Re:
So'n richtiger regex pro bin ich ja auch nicht ... die Ausdrücke sollten grundsätzlich funktionieren. Hab's gerade mal selbst ausprobiert, mit diversen Ausdrücken, Delimitern und Modifier dran ... irgendwie will er echt nicht. In PHP laufen Sie, unter Smarty nicht ... Check's grad auch nicht... sehr mysteriös ...
Mein Sportsgeist ist jetzt aber geweckt ... 
Offline
#4 13. Juni 2011 22:11
- nhaack
- Server-Pate

- Ort: Bonn
- Registriert: 12. Dezember 2010
- Beiträge: 171
- Webseite
Re:
hah ... so hat er's gefressen:
[== smarty ==]
{assign var=content value=$content|regex_replace:"@<p>(\s)*<\/p>@":""}Offline
#5 13. Juni 2011 22:35
- NaN
- Moderator

- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.058
Re:
Hm... nee, sorry. Bei mir nicht. Bleibt unverändert.
Was genau machen denn diese @-Zeichen?
Sobald im Suchmuster hinter dem ersten <p> ein Leerzeichen kommt, versagt er bereits.
/<p>\s*/ funktioniert. Aber dann findet er auch alle anderen Paragraphen.
/<p>\s/ funktioniert schonwieder nicht mehr. Obwohl das im Quelltext definitiv drinsteht.
Ebenso funktioniert auch das hier nicht mehr /<p>\s*<\/p>/
Als ob er ein Problem mit dem Leerzeichen hat.
Sind die Leerzeichen bei Smarty irgendwie maskiert bevor das ganze an den Browser geht? Als ASCII/UTF-8 Code oder so? Das würde erklären, warum der Browser ein Leerzeichen anzeigt, aber preg_replace keines finden kann.
Module: GBFilePicker, AdvancedContent, FEUMailer
Plugins: AjaxTools, XajaxTools
Sicherheit: Beispiel .htaccess-Datei
Offline
#6 13. Juni 2011 23:44
- nhaack
- Server-Pate

- Ort: Bonn
- Registriert: 12. Dezember 2010
- Beiträge: 171
- Webseite
Re:
das @ ist einfach nur ein anderer Delimiter ... macht eigentlich nichts anderes als / oder ~ oder was auch immer ... (hoffe ich erzähle jetzt nix falsches)
Habe es wie folgt probiert:
[== html ==]
<p></p>
<p> </p>
<p> </p>Hat er alles rausgelöscht. Habe die leeren Absätze einfach in einen Artikel eingestreut als auch am Anfang eines Content-Blocks.
Ich bin durchgängig UTF-8.
Sind Leerzeichen denn je nach encoding anders codiert?
Bei mir hat es jedenfalls erst funktioniert, wenn ich $content explizit neu zuweise und dabei das Regex benutze. Vorher war auch zappenduster (also, wenn ich es direkt anwende).
Sehr mysteriös. Kann da die CMSMS Version, bzw. die verwendete Smartyversion etwas mit am Hut haben? Getestet auf 1.9.4.1
Offline
#7 13. Juni 2011 04:20
- nicmare
- Server-Pate

- Registriert: 15. Dezember 2010
- Beiträge: 1.316
- Webseite
Re:
Getestet auf 1.9.4.1
funzt bei mir aber auch nicht!
1.9.4.1
Config Information:
php_memory_limit:
process_whole_template: false
output_compression: false
max_upload_size: 200000000
default_upload_permission: 664
url_rewriting: mod_rewrite
page_extension: .html
query_var: page
image_manipulation_prog: GD
auto_alias_content: true
locale:
default_encoding: utf-8
admin_encoding: utf-8
set_names: true
Php Information:
phpversion: 5.3.2-nmm1
md5_function: An (Ja)
gd_version: 2
tempnam_function: An (Ja)
magic_quotes_runtime: Aus (Nein)
E_STRICT: 0
E_DEPRECATED: 0
memory_limit: 64M
max_execution_time: 60
output_buffering: An
safe_mode: Aus (Nein)
file_uploads: An (Ja)
post_max_size: 200M
upload_max_filesize: 200M
session_save_path: /tmp (0333)
session_use_cookies: An (Ja)
xml_function: An (Ja)
Server Information:
Server Api: cgi-fcgi
Server Db Type: MySQL (mysql)
Server Db Version: 5.1.43
Meine Projekte:
Dashcam-Test | Babyphone-Testberichte | Türspionkameras
Offline
#8 13. Juni 2011 13:17
- nhaack
- Server-Pate

- Ort: Bonn
- Registriert: 12. Dezember 2010
- Beiträge: 171
- Webseite
Re:
höchstgradig mysterös ...
Offline
#9 13. Juni 2011 14:20
- NaN
- Moderator

- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.058
Re:
Also wenn, dann würde ich eher auf die PHP Version tippen.
An der Smarty-Version hat sich bei CMSms ja nichts geändert.
(Teste mit CMSms 1.9.5 SVN und 1.9.4.2)
Habe auch mal einen Postfilter geschrieben.
Gleiches Ergebnis.
Das hier ändert nichts:
function smarty_cms_postfilter_remove_empty_paragraphs($tpl_output, &$smarty)
{
return preg_replace('/<p>[\s\t\n\r]*<\/p>/im', '', preg_replace('/<p>( )*<\/p>/i', '', $tpl_output));
}Das hier funktionert (zumindest der äußere Teil):
function smarty_cms_postfilter_remove_empty_paragraphs($tpl_output, &$smarty)
{
return preg_replace('/<(\/?)p>/i', '<$1b>', preg_replace('/<p>( )*<\/p>/i', '', $tpl_output));
}Bringt mir aber nichts, weil ich die Absätze ja nicht in <b> umwandeln will.
Hab es mit PHP 5.3.2, 5.2.13 (beides Mac) und 5.2.12-nmm2 (Linux 2.6.32-32-server - Allinkl.) getestet.
Könnte auch an der verwendeten PCRE Libary liegen.
Laut phpinfo() hab ich 8.00 2009-10-19 (PHP 5.3.2) und 7.9 2009-04-11 (PHP 5.2.*).
Ich check's nicht.
€: Lustig, ein leerer Absatz <p> </p> wird nicht ersetzt. Aber wenn ich ein Zeichen reinsetze: <p>-</p> und nach /<p>-<\/p>/ suche, dann klappt es.
Bei einem Inhaltsblock ohne WYSIWYG Editor bzw. einem Absatz im Template, klappt es.
Mit TinyMCE nicht. Was zum Teufel schreibt der TinyMCE in leere Absätze rein, was aussieht wie ein Leerzeichen aber offenbar keines ist?
Module: GBFilePicker, AdvancedContent, FEUMailer
Plugins: AjaxTools, XajaxTools
Sicherheit: Beispiel .htaccess-Datei
Offline
1
- Übersicht
- »
- »