Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 12. Juni 2011 18:37
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.435
Problem mit regex_replace bzw. replace
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
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#2 12. Juni 2011 20:30
- nicmare
- Server-Pate
- Registriert: 15. Dezember 2010
- Beiträge: 1.314
- Webseite
Re: Problem mit regex_replace bzw. replace
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: Problem mit regex_replace bzw. replace
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: Problem mit regex_replace bzw. replace
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.435
Re: Problem mit regex_replace bzw. replace
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
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#6 13. Juni 2011 23:44
- nhaack
- Server-Pate
- Ort: Bonn
- Registriert: 12. Dezember 2010
- Beiträge: 171
- Webseite
Re: Problem mit regex_replace bzw. replace
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.314
- Webseite
Re: Problem mit regex_replace bzw. replace
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: Problem mit regex_replace bzw. replace
höchstgradig mysterös ...
Offline
#9 13. Juni 2011 14:20
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.435
Re: Problem mit regex_replace bzw. replace
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
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
Seiten: 1