par
Ripat » 24 avr. 2012, 09:57
Le problème des accentués et des regex de PHP est souvent causé par des locales mal configurées. Que donne ce bout de code chez toi:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<pre>
<?php
echo setlocale(LC_CTYPE, 0).PHP_EOL;
echo (int) preg_match('#.#', 'école', $out).PHP_EOL;
echo $out[0].PHP_EOL;
echo '<hr>';
echo setlocale(LC_CTYPE, 0).PHP_EOL;
echo (int) preg_match('#..#', 'école', $out).PHP_EOL;
echo $out[0].PHP_EOL;
echo '<hr>';
echo setlocale(LC_CTYPE, 'fr_BE.utf8').PHP_EOL;
echo (int) preg_match('#.#u', 'école', $out).PHP_EOL;
echo $out[0].PHP_EOL;
?>
</pre>
</body>
Veille à changer
fr_BE.utf8 en une locale présente sur ton système. Si tu utilises linux, fais un
locale -a pour trouver les locales unicode installée sur ta machine.
Le problème des accentués et des regex de PHP est souvent causé par des locales mal configurées. Que donne ce bout de code chez toi:
[php]<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<pre>
<?php
echo setlocale(LC_CTYPE, 0).PHP_EOL;
echo (int) preg_match('#.#', 'école', $out).PHP_EOL;
echo $out[0].PHP_EOL;
echo '<hr>';
echo setlocale(LC_CTYPE, 0).PHP_EOL;
echo (int) preg_match('#..#', 'école', $out).PHP_EOL;
echo $out[0].PHP_EOL;
echo '<hr>';
echo setlocale(LC_CTYPE, 'fr_BE.utf8').PHP_EOL;
echo (int) preg_match('#.#u', 'école', $out).PHP_EOL;
echo $out[0].PHP_EOL;
?>
</pre>
</body>
[/php]
Veille à changer [b]fr_BE.utf8[/b] en une locale présente sur ton système. Si tu utilises linux, fais un [b]locale -a[/b] pour trouver les locales unicode installée sur ta machine.