2016-07-06 9 views
1

Der folgende Aufruf an preg_replace schlägt fehl und gibt eine leere Zeichenfolge zurück, wenn content Akzentzeichen wie à oder ÿ enthält.Wie verhindert man, dass Zeichen mit Akzent einen PHP-Regex zum Scheitern bringen?

preg_replace('@([^=][^"])(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.\%\+#-]*(\?\S+)?[^\.\s])?)?)@', '$1<a href="$2" target="_blank">$2</a>', $content); 

schrieb ich die Regex in preg_replace auf diese Weise, und es funktionierte:

preg_replace('@([^=][^"])(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.\%\+#ÂÃÄÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ-]*(\?\S+)?[^\.\s])?)?)@', '$1<a href="$2" target="_blank">$2</a>', $content); 

Wie kann ich es kürzer machen?

+0

Ich denke nicht so führen, wenn ich nur setzen \ w es immer blockieren, wenn es eine akzentuierte Zeichen – Mireille28

+0

@ chris85 sehen: nein! '\ w' enthält nicht-ASCII-Zeichen, wenn der Modifikator u verwendet wird oder wenn das Muster mit' (* UCP) 'beginnt. Und selbst wenn der Modifikator u oder '(* UCP)' verwendet wird, stimmt es nicht mit Buchstaben mit einer Kombinationsmarkierung überein. –

+0

wo setze ich das? nach dem Schließen meines Regex-Begrenzers? – Mireille28

Antwort

1

Verwenden Sie Unicode, um Ihr Problem zu lösen.

[\u00bf-\u00ff]

Verwandte Themen