Kodlama ile preg_replace () sorun ve scandir ()

2 Cevap php

OS-X (PHP5.2.11) üzerine bir dosya var: siësta.doc (ve Unicode dosya ile diğer bin) ve bir web-sarf formatında (a-zA-Z0-9.) için dosya adlarını dönüştürmek istiyorum. Yukarıda dosya adını hardcode ben doğru dönüştürme yapabilirsiniz:

<?php
  $file = 'siësta.doc';
  echo preg_replace("/[^a-zA-Z0-9.]/u", '_', $file);
  // Output: si_sta.doc
?>

Ben scandir ile dosya adlarını okursanız Ama garip dönüşümler var:

<?php
  $files = scandir(DIRNAME);
  foreach ($files as $file) {
    echo preg_replace("/[^a-zA-Z0-9.]/u", '_', $file);
    // Output for the file above: sie_sta.doc
  }
?>

I tried to detect the encoding, set the encoding, convert it with iconv functions. I tried the mb_ functions also. But it was just worse. What did I do wrong?

Şimdiden teşekkürler

2 Cevap

İlginç. Biraz recherché sonra ben OSX mağazaları dosya adları "çürümüş unicode" olarak tespit ettik (bkz. http://developer.apple.com/mac/library/qa/qa2001/qa1173.html). Yani "ë" "e" + diaresis sembolü (0xcc88) olarak temsil edilir.

Sen utf8_encode denemek mi? (Windows Works en azından)

<?php
  $files = scandir(DIRNAME);
  foreach ($files as $file) {
    echo preg_replace("/[^a-zA-Z0-9.]/u", '_', utf8_encode($file));
    // Output for the file above: sie_sta.doc
  }
?>