2010-03-11 8 views

Répondre

4

Pour remplacer les « caractères spéciaux », vous devez utiliser iconv: $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);

Comme pour obtenir les valeurs entre les guillemets, voir les autres réponses. Utilisez preg_replace_callback pour exécuter la conversion ci-dessus sur les correspondances.

EDIT: tout alimentation à la cuiller ensemble:

<?php 
$input = 'ööbik'; 
$expected = 'ööbik'; 

// Set the locale of your input here. 
setlocale(LC_ALL, 'en_US'); 

// Convert using a callback. 
$output = preg_replace_callback('/href="([^"]+)"/', function ($matches) { 
    return iconv('UTF-8', 'ASCII//TRANSLIT', $matches[0]); 
}, $input); 

echo "Input: $input\n"; 
echo "Expected: $expected\n"; 
echo "Output: $output\n"; 

Cet exemple suppose que PHP 5.3. Utilisez "create_function" ou une fonction nommée si vous êtes bloqué sur PHP 5.2 ou ci-dessous.

+0

BTW, je suis entièrement d'accord avec ne pas utiliser des expressions régulières pour l'analyse HTML. Par exemple, ce code ne fonctionne pas pour les attributs href = '' entre guillemets simples. Utilisez DOMDocument :: loadHTML, par exemple. – janmoesen

+0

Je l'adore quand de nouveaux utilisateurs viennent ici pour obtenir une réponse rapide, puis vamoose! Aussi, j'aime le mot "vamoose". – janmoesen

0

Alors que le débordement de la pile question Finding quoted strings with escaped quotes in C# using a regular expression peut vous aider à trouver le texte cité, je pense que la meilleure solution est de le faire par l'analyse d'une chaîne HTML et travailler avec son DOM.

+0

Je suis d'accord que l'utilisation de regexp sur HTML est généralement une mauvaise idée, mais quand vous avez seulement besoin de récupérer une chaîne très spécifique à partir d'un document HTML, comme un seul attribut, une expression rationnelle est très bien. – Atli

+0

D'accord, cela dépend d'un cas spécifique. – Kamarey

Questions connexes